繁体   English   中英

在onclick之后执行onclick和onclientclick webmethod

[英]onclick and onclientclick webmethod executed after onclick

我试图使用webmethod( .asmx )设置变量

该按钮使用onclick调用服务器端方法, onclientclick调用调用onclientclick的javascript ajax。

我需要在调用onclick服务器端方法之前完全执行javascript代码,但似乎在回发之前没有完全执行ajax调用。

在回发之前调用警报,但是在回发之后调用web方法。 我需要在回发完成之前从webmethod设置变量。 我试过从javascript返回一个假,但后来回发根本没有完成。

我在asp.net中使用Masterpages。 此外,我在另一个项目中有一个类似的功能,工作正常,唯一的区别是在这一个我使用MasterPage。

<asp:TemplateField>
<ItemTemplate>
    <asp:Button ID="btnAddRegistration" ClientIDMode="Static" CssClass="btn-sm btn-default" runat="server"
        CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
        onclick="btnAddRegistration_Click"
        OnClientClick='<%# "getSetContactID(\"" + Container.DataItemIndex + "\")" %>'
        Text="Add &#010;Registration" />
 </ItemTemplate>
</asp:TemplateField>

Javascript(调用webmethod)

 function getSetContactID(rowIndex) {

    var CellValue, cell, dataItemIndex;
    var table = document.getElementById('<%=gvContactSearch.ClientID %>');

    $.ajax({
        type: "POST",
        url: "WebService1.asmx/setContactIDgvContact",
        data: '{DataItemIndex: "' + rowIndex + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: alert(rowIndex), <--this gets called before postback
        failure: function (response) {alert(response.d);}

        })
 }

Web服务方法

 [WebMethod]
        public string setContactIDGV1(int DataItemIndex){
           classDetails.gV1DataItemIndex = DataItemIndex; 
           return "";
        }

你在这里有一个经典的竞赛条件。

默认情况下,AJAX调用是异步的,因此当您触发AJAX调用时,JS代码块在逻辑上结束,并触发下一个顺序事件,在这种情况下是您的服务器端事件。 然后是AJAX代码执行的函数和服务器端的onclick事件之间的竞争。 我看到它的方式你有几个选择:

  1. 通过单击方法在服务器端调用Web服务方法
  2. 防止JS块( event.preventDefault )中的默认元素操作,并在完成序列的AJAX success方法中挂钩
  3. 在AJAX调用上设置async: false选项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM