簡體   English   中英

按下后退按鈕時將觸發ASP.NET Button事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM