【问题标题】:Explicit __doPostBack()显式 __doPostBack()
【发布时间】:2010-09-19 15:26:06
【问题描述】:

我已经在 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;"/>

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

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

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

【问题讨论】:

    标签: .net asp.net webforms dopostback


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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 属性是完全多余的。

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

      【讨论】:

        【解决方案3】:

        Button 已经做了 PostBack,为什么还要从客户端调用呢?

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2013-06-10
            • 1970-01-01
            • 1970-01-01
            • 2011-03-29
            • 2011-08-11
            • 2011-09-15
            • 2011-04-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多