[英]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()
。 現在,您需要在按下按鈕時在Page
的Page_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.