簡體   English   中英

讀取自定義用戶控件狀態

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

MSDN:動態添加用戶控件

如果在Viewstate變量中存儲已添加控件的數量,則無法在Page的Init-Event中重新創建控件,因為ViewState-Variable尚未在那里重新加載。

除非您進行PostBack否則您將沒有任何ControlState 刷新瀏覽器/請求相同的鏈接將是一個全新的開始。

默認情況下,添加到頁面的任何control都是存儲在UserControl ViewStateControlState中的數據。

如果您願意保存您的內容,我建議您將其保存在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.

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