代码之家  ›  专栏  ›  技术社区  ›  SausageBuscuit

按下后退按钮时触发ASP.NET按钮事件

  •  0
  • SausageBuscuit  · 技术社区  · 12 年前

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

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

    <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>
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   AdamRoof    12 年前

    我会采取“正常行为”。这一直是我的眼中钉,我的超优雅解决方案是将回发包裹在UpdatePanel中。。。这会导致其他问题和需求,但至少后退按钮不会触发任何事情,而且我似乎永远无法控制我的最终用户。

        <asp:ScriptManager id="smPage" runat="server"/>
    
        <asp:UpdatePanel id="upPnlRepeater" runat="server">
            <ContentTemplate>
                <asp:Repeater id="YourRepeater">
                </asp:Repeater>
            </ContentTemplate>
        </asp:UpdatePanel>
    
        2
  •  0
  •   SausageBuscuit    12 年前

    很快就搞定了。。。应该再坚持一会儿再问。改变:

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

    CommandName='AddorDelete'
    

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