[英]Read custom user control state
我添加了一個自定義用戶控件到我的頁面,文本框和radioboxes,但每次回發后,內容被刪除,我不知道如何讀取其中輸入的值。
根據我的經驗,您必須在每次刷新時添加用戶控件,但這不會恢復其狀態。 我希望將值存儲在ViewState中,但由於某種原因不會發生這種情況。
注意:我需要在一個頁面上添加多個用戶控件,因此我需要通過ID或從我的頁面中選擇該用戶控件的linq表達式來標識每個用戶控件。
我用C#4.0編程
我如何添加我的用戶控件:
private void AddInstrumentDetailToPage()
{
RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx");
InstrumentDetail.Controls.Add(lItem);
}
我保存了ViewState中的控件數量,並調用了AddInstrumentDetail()那么多次,但它們看起來都是空的。 我已經讀過某個地方,我必須在Page_Init中添加它,因為視圖狀態尚未初始化,但這也無濟於事。
您需要最近在Page_Load
重新創建動態添加的(用戶)控件以維護ViewState。 因此,您應該將已添加的控件的數量存儲在ViewState-Property中,並根據它在Page_Load
中重新加載它們。 您必須在AddInstrumentDetailToPage
將此變量與1 AddInstrumentDetailToPage
。
如果在Viewstate變量中存儲已添加控件的數量,則無法在Page的Init-Event中重新創建控件,因為ViewState-Variable尚未在那里重新加載。
除非您進行PostBack
否則您將沒有任何ControlState
。 刷新瀏覽器/請求相同的鏈接將是一個全新的開始。
默認情況下,添加到頁面的任何control
都是存儲在UserControl
ViewState
和ControlState
中的數據。
如果您願意保存您的內容,我建議您將其保存在Request.Session.Add("yourKey", "yourValue")
。
您可以使用var yourValue = Request.Session["yourKey"];
訪問您的會話var yourValue = Request.Session["yourKey"];
在protected void Page_Load(object sender, EventArgs e)
方法上。
指定RMAItem
實例的ID,否則在ControlState
上存儲數據可能不起作用!
private void AddInstrumentDetailToPage()
{
RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx");
lItem.ID = "rmaItem1"; //<-- This is important
InstrumentDetail.Controls.Add(lItem);
}
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.