我有一个asp.net站点(C#backend),它从数据库加载信息。它允许用户通过单击添加/删除按钮来保存信息。此按钮根据用户是否已保存而动态更改。我使用命令名和参数来传递数据。按下按钮时,它会停留在同一页面上,只更新外观(回发)。这在正常情况下运作良好。但是,如果用户导航离开页面,然后返回到页面,则会为按下的按钮重新执行OnClick方法。
我知道在使用后退按钮时它正在回发,但为什么它会触发最后一次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>
答案 0 :(得分:1)
我会选择“正常行为”。这一直是我的荆棘,我的超级优雅的解决方案是将回传包装在UpdatePanel中...这导致其他问题和需求,但至少后退按钮不会触发任何东西,我似乎永远不会控制我的最终用户。
<asp:ScriptManager id="smPage" runat="server"/>
<asp:UpdatePanel id="upPnlRepeater" runat="server">
<ContentTemplate>
<asp:Repeater id="YourRepeater">
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
答案 1 :(得分:0)
快速得到这个......在问之前应该再坚持一段时间。改变:
CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>'
到
CommandName='AddorDelete'
并将后端代码更改为仅更改命令参数。