__doPostBack()在aspx页面中导致了回发,但没有调用按钮单击事件

9
我正在使用一个包含按钮的aspx页面。
 <asp:Button ID="savebtn" runat="server" OnClick="savebtn_Click" Style="display: none" />

以下代码展示了两种引起后台提交的方式。
 $(document).ready(function () {
               var id = document.getElementById('<%= savebtn.ClientID %>');
       //Cause post back & calls page load but not savebtn_Click event
            __doPostBack('<%= savebtn.ClientID  %>', 'OnClick');

    });

    $(document).ready(function () {
                     var id = document.getElementById('<%= savebtn.ClientID %>');
           //Cuase postback & calls both PageLoad and savebtn_Click events.
           //If I use method, There is no way to know which control caused postback
            id.click();

    });

当我使用__doPostBack时,它调用页面加载事件而不是按钮单击事件。

有没有一种方法可以使用__doPostBack来触发页面加载以及savebtn_Click事件。

如果我像上面所示使用id.click();,我能够调用savebtn_Click,但它并不告诉我是哪个控件引起了回发。


你为什么要尝试使用客户端进行Postback呢? - Ehsan Sajjad
2个回答

23

你尝试使用UniqueID而不是ClientID了吗?

__doPostBack('<%= savebtn.UniqueID %>', "");

还可以看看这个关于dopostback的快速教程


这个可行,但如果有人能解释一下它是如何工作的就太好了。 - Rush.2707
UniqueID返回名称属性(使用$作为分隔符)的值,而ClientID返回id属性(使用_作为分隔符)的值。它的工作原理如下:"UniqueID在PostBack中也扮演着重要的角色。支持PostBack的服务器控件的UniqueID属性为__EVENTTARGET隐藏字段提供数据。然后,ASP.NET运行时使用__EVENTTARGET字段查找触发PostBack的控件,然后调用其RaisePostBackEvent方法。"https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid - Gabe

2
我用这段代码解决了这个问题:
  document.all('Button1').click();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接