[英]ASP.NET Button Event fires when back button pressed
我有一個asp.net網站(C#后端),可從數據庫中加載信息。 它允許用戶通過單擊添加/刪除按鈕來保存信息。 該按鈕根據用戶是否保存了按鈕而動態變化。 我正在使用命令名和參數來傳遞數據。 當按下按鈕時,它會停留在同一頁面上,只是更新外觀(回發)。 在正常情況下,此方法運行良好。 但是,如果用戶離開該頁面,然后返回該頁面,則它將為所按下的按鈕重新執行OnClick方法。
我知道使用“后退”按鈕時正在執行回發,但是為什么它會觸發最后一次onclick? 這是正常行為嗎? 我嘗試禁用緩存,並試圖使頁面過期,但一切都無效。 數據顯示在中繼器中,並且啟用了ViewState ...根據我的閱讀,我想知道這是否是原因。 但是,如果禁用ViewState,則回發時不會顯示任何結果。 如果有問題,是否有其他方法可以使數據在Repeater中動態更新而無需使用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>
我將遵循“正常行為”。 這一直對我來說是一個荊棘,我最優雅的解決方案是將回發包裝在UpdatePanel中……這會導致其他問題和需求,但是至少后退按鈕不會觸發任何操作,而且我永遠都不會控制我的最終用戶。
<asp:ScriptManager id="smPage" runat="server"/>
<asp:UpdatePanel id="upPnlRepeater" runat="server">
<ContentTemplate>
<asp:Repeater id="YourRepeater">
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
很快就知道了...應該在詢問之前再堅持一會兒。 更改:
CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>'
至
CommandName='AddorDelete'
並將后端代碼更改為僅更改命令參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.