明确的__doPostBack()

时间:2010-09-19 15:26:07

标签: .net asp.net webforms dopostback

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

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

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

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

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

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

并且返回true再次给我两次页面加载,但在attribute.add代码中添加返回true或false给出相同的结果,只有一个页面加载调用。

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

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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,因为它呈现的“onClientClick”不是JavaScript事件(即_doPostBack永远不会被触发,但通常是回发)。 Attributes属性用于将直接HTML属性(不从.NET重写)添加到按钮的最终呈现。

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

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

答案 3 :(得分:0)

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