2011-10-25 83 views
0

我添加了一個自定義用戶控件到我的網頁,用文本框和選項框,但每次回發後,除去內容物,我不知道如何讀它中輸入的值。讀自定義用戶控件狀態

從我所學到的,你必須在每次刷新時添加用戶控件,但不會恢復它們的狀態。我希望將值存儲在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中,因爲視圖狀態尚未初始化,但這也無濟於事。

+0

你如何添加你的用戶控件?將它添加到aspx代碼中是否可行? –

回答

1

您需要重新在Page_Load最新動態添加(用戶)控制來維持的ViewState。因此,您應該將已添加的控件的數量存儲在ViewState-Property中,並根據它們在Page_Load中重新加載它們。你必須在AddInstrumentDetailToPage中用1來總結這個變量。

MSDN: Dynamically Adding User Controls

如果存儲在視圖狀態變量添加控件的數量,你不能因爲ViewState的變量將尚未被重新加載重新出現在頁面的初始化,事件控制。

+0

我保存了ViewState中的控件量,並調用AddInstrumentDetail()這個次數,但它們看起來是空的。我讀過一些地方,我必須將它添加到Page_Init中,因爲視圖狀態尚未初始化,但這也無濟於事。 – NomenNescio

+0

啊!我理解,我必須在Page_Init中添加控件,但我怎麼知道我需要添加多少?我可以將它保存在查詢字符串中嗎? – NomenNescio

+0

在Page_Load中可能就足夠了(使用ViewState變量來存儲添加的控件的數量的優勢)。看看下面的文章,看看它是否足夠:http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic4或另一個類似的問題上我:http://stackoverflow.com/questions/5046101 /動態創建控件正在被按下按鈕/ 5046162#5046162 –

1

你不會有任何ControlState除非你犯了一個PostBack。刷新瀏覽器/請求相同的鏈接將只是一個全新的開始。

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

如果你願意保存您的內容,我會建議你將它保存在Request.Session.Add("yourKey", "yourValue")

您可以在protected void Page_Load(object sender, EventArgs e)方法訪問與var yourValue = Request.Session["yourKey"];會話。

指定您的RMAItem實例的ID,否則在ControlState上存儲數據可能無效!

private void AddInstrumentDetailToPage() 
{ 
    RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx"); 
    lItem.ID = "rmaItem1"; //<-- This is important 
    InstrumentDetail.Controls.Add(lItem); 
} 

希望它有幫助!