[ASP.NET]ASP.NET Postback前檢查的方式(II)

[ASP.NET]ASP.NET Postback前檢查的方式(II)

之前有記錄了「ASP.NET Postback前檢查的方式」3種方式,都是以同步的方式來進行!

昨天幫同事查這種問題時,順便記錄個非同步檢查的方式。

非同步的方式只要加個Flag變數來判斷就可以了哦! 

以下筆者以PageMethods來示範,使用Web Service等其他非同步呼叫方式也都可以哦!

 

在cs檔中建立一個PageMethod,及Handle Button Click要做的事,如下,

//取得要判斷的值
[System.Web.Services.WebMethod]
public static string GetAskData(string value)
{
	return value;
}

//真正btnRun要做的事
protected void btnRun_Click(object sender, EventArgs e)
{
	ScriptManager.RegisterStartupScript(this, this.GetType(), "btnRun", "alert('Ask OK to Process!');", true);
}

 

在aspx中,拉一個ScriptManager,並設定 strong>EnablePageMethods="True" ,而Button的OnClientClick事件,就透過callPageMethod變數來判斷(每次Page重新Render後,該變數就會被Reset成true),要Call PageMethod或是回傳true,然後Postback,如下,

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"
            EnablePageMethods="True">
        </asp:ScriptManager>
        <div>
            <asp:Button ID="btnRun" runat="server" Text="Run" OnClientClick="return submitBeforeCheck();" OnClick="btnRun_Click" />
        </div>
    </form>
</body>
<script type="text/javascript">
    var callPageMethod = true;
    function submitBeforeCheck() {
        if (callPageMethod) {
            PageMethods.GetAskData("1", onSuccess, onError);
        } else {
            return true;
        }
        return false;
    }

    function onSuccess(result) {
        var postback = false;
        if (result == "1") {
            postback = confirm("警告!是否要submit?");
        }
        if (postback) {
            //要postback
            callPageMethod = false;
            $get("btnRun").click();
        }
    }

    function onError(err) {
        alert(err);
    }
</script>
</html>

 

image

image

 

範例程式,多加入AskContinue4.aspx

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^