【问题标题】:ASP.NET Button Event fires when back button pressed按下后退按钮时触发 ASP.NET 按钮事件
【发布时间】:2013-10-11 19:53:39
【问题描述】:

我有一个从数据库加载信息的 asp.net 站点(C# 后端)。它允许用户通过单击添加/删除按钮来保存信息。这个按钮会根据用户是否保存而动态变化。我正在使用命令名和参数来传递数据。按下按钮时,它会停留在同一页面上,并且只会更新外观(执行回发)。这在正常情况下运行良好。但是,如果用户离开页面,然后返回页面,它会为按下的按钮重新执行 OnClick 方法。

我知道使用后退按钮时它正在回发,但为什么它会触发最后一次点击?这是正常行为吗?我曾尝试禁用缓存,并尝试使页面过期,但一切都不起作用。数据显示在转发器中,并且 ViewState 已启用......从我读过的内容来看,我想知道这是否是原因。但是,如果 ViewState 被禁用,则回发时不会显示任何结果。如果是问题所在,是否有其他方法可以在不使用 Viewstate 的情况下让数据在 Repeater 中动态更新?不确定它是否有任何帮助,但显示命令名和参数的按钮标记如下。

<asp:Repeater ID="ItemRepeater" runat="server" EnableViewState="true">
    <!--Lots of other code before pressed button-->
    <asp:Button ID="additembutton" runat="server" OnClick="AddDelOnClick" Text='<%# textToDisplay((int)Eval("isSaved")) %>'
     CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>' 
     CommandArgument='<%# DataBinder.Eval(Container.DataItem, "itemnumber").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "department").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "itemdescription").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim()%>'
     CssClass='<%# cssClassToDisplay((int)Eval("isSaved")) %>' /></td></tr>

【问题讨论】:

    标签: c# asp.net postback viewstate


    【解决方案1】:

    很快就得到了这个……应该在问之前再坚持一会儿。更改:

    CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>'
    

    CommandName='AddorDelete'
    

    并将后端代码更改为仅更改命令参数。

    【讨论】:

      【解决方案2】:

      我会选择“正常行为”。这对我来说一直很棘手,我超级优雅的解决方案是将回发包装在 UpdatePanel 中......这会导致其他问题和需求,但至少后退按钮不会触发任何东西,而且我永远不会出现来控制我的最终用户。

          <asp:ScriptManager id="smPage" runat="server"/>
      
          <asp:UpdatePanel id="upPnlRepeater" runat="server">
              <ContentTemplate>
                  <asp:Repeater id="YourRepeater">
                  </asp:Repeater>
              </ContentTemplate>
          </asp:UpdatePanel>
      

      【讨论】:

      • 有趣的是,我有另一个页面做类似的事情(只是更新而不是添加/删除),并且在使用返回时工作正常。除了我如何执行命令名之外,我还没有找到任何不同的东西,但到目前为止,这并没有给我带来任何运气。您在此处的代码是在母版页还是在带有控件的页面上完成的?
      • 好的,看起来这仍然是正常行为,但是一旦解决了所有问题,更改我的命令参数确实让我到达了我需要的位置。我似乎总是在发布后立即回答我自己的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2019-06-21
      • 2017-05-09
      相关资源
      最近更新 更多