1

我在 Button onclientClick 事件上明确添加了 __doPostBack() 。

<asp:Button ID="Button1" runat="server" Text="Button" 
         OnClientClick="__doPostBack('Button1','')"/> 

当我单击按钮时,Page_Load 调用了两次。但是,如果我在页面加载中添加以下代码,则页面加载仅在按钮单击时调用一次。

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','')");

再次,如果我添加 return false 它只给我调用一次页面加载点击

 <asp:Button ID="Button1" runat="server" Text="Button" 
         OnClientClick="__doPostBack('Button1','');return false;"/>

并且 return true 再次给了我两次页面加载,但是在属性中添加 return true 或 false。添加代码给出了相同的结果,只有一个页面加载调用。

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','');return true;");

当我尝试以不同的方式添加 __doPostBack 时,我无法理解到底发生了什么。请帮忙。谢谢

4

4 回答 4

4

通过放置 OnClientClick,asp.net 会使用您的代码和 doPostBack 在客户端大小上呈现 onlick 函数。

所以它被调用了 2 次,因为一次是自己调用的,一次是因为你添加的。

于 2010-09-20T07:39:54.600 回答
1

Aristos 和 user449689 的答案是正确的:你有一个双重回发,因为 ASP.NET 按钮总是做回发(所以 OnClientClick 没有用,因为它之前触发了另一个回发)。

当您从 OnClientClick 返回 true(或不返回任何内容)时,您不会阻止按钮的 JavaScript onClick 事件(即按钮仍然被单击并触发 _doPostBack,然后是正常的回发)。如果返回false,onClick事件被取消(即按钮没有真正被点击,所以只触发_doPostBack)。这就是 JavaScript 行为。

OnClientClick 属性在 HTML 代码中呈现为“onClick”(当此属性位于 ASP.NET 按钮上时)。你的说法...

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','');return true;");

...不是有效的 HTML,因为它呈现不是 JavaScript 事件的“onClientClick”(即 _doPostBack 永远不会触发,但通常的回发是)。Attributes 属性用于将直接的 HTML 属性(不从 .NET 重写)添加到按钮的最终呈现。

我的建议:不要调用 _doPostBack,除非您没有找到任何其他替代方法来触发回发。在您提供的示例中, OnClientClick 属性是完全多余的。

我希望我足够清楚(我的英语不是很好)。

于 2011-12-08T02:19:59.523 回答
1

一个 Button 已经做了一个 PostBack,那么为什么你需要从客户端调用它呢?

无论如何,我认为您的情况下的 page_load 被调用了两次,因为一次是由 OnClientClick 完成的,第二次是服务器端。

于 2010-09-19T21:29:44.613 回答
0

您可以尝试查看呈现的输出(即在浏览器中访问您的 ASPX 页面并查看页面源代码)并查看生成的 HTML/Javascript 的样子。也许__doPostBack被调用了两次。

于 2010-09-20T00:14:21.370 回答