在ajax调用中从javascript提升服务器端按钮单击事件

Sha*_*pta 6 javascript c# asp.net jquery

我在页面上有一个提交按钮.

<asp:Button ID="btnSubmit" runat="server" Text="Save Test" OnClick="btnSubmit_Click"
                                        OnClientClick="return ValidateSaveTest(this);" />
Run Code Online (Sandbox Code Playgroud)

在Javascript上,调用ValidateSaveTest函数来验证所有字段.

function ValidateSaveTest(Sender) {

            //do some validation, if fails return false from here. else move forward

        var parameters = {};
        parameters["parametersName"] = $("#" + hidTestId).val();

        var succeededAjaxFn = function(result) {
            if (result== true) {
                var isNewVersion = confirm("Confirmation message");
                if(isNewVersion)
                {
                        //Raise server side button click event. Dont call click side event anymore.
                        $("#" + "<%=btnSubmit.ClientID %>").click();
                }
                return false;
            }

        }
        var failedAjaxFn = function(result) { return false; }

            //jquery ajax call
        CallWebMethod("../Service.asmx", "IsTestUsed", parameters, succeededAjaxFn, failedAjaxFn);

        //async call, always return false hence no postback from here.
        //Need waiting unless ajax response is obtained.
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

一旦收到ajax响应,我需要从javascript引发服务器端按钮单击事件.

Mic*_*out 14

您可以从ClientScriptManager的GetPostBackEventReference方法获取所需的JavaScript代码:

返回可在客户端事件中使用的字符串,以便回发到服务器.

这通常用于在控件上编写onclick属性<asp:linkButton>,但是您也可以在jQuery回调中使用它:

var succeededAjaxFn = function(result) {
  //Raise server side button click event. Dont call click side event anymore.
  <%= Page.ClientScript.GetPostBackEventReference(btnSubmit, String.Empty) %>;
}
Run Code Online (Sandbox Code Playgroud)

<%= %>上面的块将为您写出以下JavaScript:

__doPostBack('btnSubmit','')
Run Code Online (Sandbox Code Playgroud)

反过来,它会以一种ASP.NET认为单击按钮的方式将表单发回服务器,从而btnSubmit_Click触发服务器端.

请注意,使用此方法,您可以将C#引用传递给实际控件.您无需担心其客户端ID或__doPostback()JavaScript函数的正确名称和参数.ClientScriptManager当你调用这个方法时,所有这一切都由你来处理.