簡體   English   中英

如何防止AutoPostBack重置我的頁面?

[英]How to prevent AutoPostBack from resetting my page?

我正在構建一個頁面,其中包含頁面上靜態的一些組件(下拉列表,按鈕,用於保存它們的表),但是一個表格單元格填充了可變生成的CheckBoxes。 按下按鈕時,頁面代碼會計算要放置的復選框,並為每個所需的CheckBox創建一個新的CheckBox對象,然后將其添加到頁面上的現有Div中。

我試圖在檢查或取消選中任何代碼時觸發一些代碼運行,但checkBoxName.CheckedChanged += cbCheckedChanged無效。 我研究並發現了兩個建議:啟用viewstate並啟用autopostback。

checkBoxName.EnableViewState = true; 似乎沒有區別, checkBoxName.ViewStateMode = ViewStateMode.Enabled; 或者我試過的任何變化。 checkBoxName.AutoPostBack = true; 做了SOMETHING,但它不允許它運行我想要的代碼。 我認為這是因為由於下一個問題,它沒有達到這一點:

使用AutoPostBack = true ,每當我選中或取消選中一個框時, cbCheckedChanged都沒有被執行,整個頁面正在重新加載,重置回它的初始狀態,因此從表中完全刪除了復選框。

我該如何解決這些問題,或者至少我可以從哪里開始尋找?

編輯:

這是創建復選框的位置:

CheckBox cb = new CheckBox();
cb.Text = CBName;
cb.EnableViewState = true;
cb.ViewStateMode = ViewStateMode.Enabled;
cb.AutoPostBack = true;
cb.CheckedChanged += CBCheckedChanged;

這是CBCheckedChanged的地方:

private void CBCheckedChanged(object sender, EventArgs e)
{
\\Stuff
}

當我使用斷點來逐步執行它時,它永遠不會到達CBCheckedChanged。 我已經嘗試了在AutoPostBack,ViewStateMode和EnableViewState行中注釋和離開的所有可能組合。

Page_Load當前為空,在用戶點擊按鈕之前不會運行任何內容。

默認情況下,為服務器端控件啟用ViewState 您不必修改ViewState來解決您的問題。 ViewState主要用於在回發發生后恢復控件的狀態。 例如,讀取ListBox控件的所有條目。 這就是為什么大多數控制填充代碼都在Page_Load方法中的這種構造中。

private void Page_Load()
{
    if (!Page.IsPostBack)
    {
        // populate controls here
    }
}

ViewState是一個被誤解的概念。 這里有一篇很棒的文章詳細介紹了它。 但正如我所說,對於你的問題,ViewState不是一個問題。

要解決您的問題:

您的情況下的問題是觸發按鈕正在創建CheckBox控件,但是當重新加載頁面時,由於這些控件的CheckedChanged事件,下一頁生命周期不知道放在頁面上的CheckBox控件在上一頁生命周期中。 需要為每個頁面生命周期生成動態控件!

所以我要做的是創建一個方法:

  • 創建CheckBox控件和
  • 為他們設置AutoPostback = true
  • 設置CheckedChanged的事件處理程序

讓我們調用這個方法AddDynamicCheckBoxes() 現在,您需要在按下按鈕時在PagePage_Load事件中調用此方法,並且還需要在按鈕的click事件的事件處理程序中調用此方法。 您可以這樣做:

private void Page_Load()
{
    if (ViewState["button_was_clicked"] != null)
    {
        AddDynamicCheckBoxes();
    }
}

private void Button_OnClick()
{
    AddDynamicCheckBoxes();
    ViewState["button_was_clicked"] = true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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