2011-01-27 78 views
0

好吧,真正爲你的另一個愚蠢的Q的時間。堅持一個控件的屬性

我有一個控件,有一些屬性需要在ViewState中保存。如果控件在頁面上出現多次,我還需要確保屬性不會被覆蓋。

我覺得寫東西像...

ViewState[String.Format("{0}_{1}", "BaseKey", this.ClientID)] = ... 

但客戶端ID的值在頁面的生命週期變化的中途。它從「MyControl1」開始,然後變成「ctl001_MyControl1」。所以在更改之前應用的任何值都會丟失。

如果我使用UniqueID,則會發生同樣的情況。

我知道我錯過了一些明顯的東西,我要去責怪我服用的藥片,所以我也不看愚蠢。

- 斯圖爾特

回答

2

它看起來像你這樣做的用戶控件中,如果這是真的,你不需要做出獨特視圖狀態的關鍵,每個控件的每個實例管理它自己的視圖狀態,所以你需要的是你的控件已知的一個關鍵,類似這樣的:

ViewState[@"somekey"] = ... 
1

嘗試做它Page_PreRender而不是Page_Load中?

+0

嗯。但是如果使用控件的開發人員在頁面標記中設置了這些屬性中的任何一個,我就會失去它們。 – 2011-01-27 12:48:02

+0

看起來標記的值是在ID改變之前設置的。 – 2011-01-27 12:48:39

1

不要存儲名稱相對於控件本身的輸出名稱的值。爲其提供一個唯一的,不變的名稱,然後確保所有綁定規則都適合該名稱而不是客戶名稱。

編輯:
由於我是什麼意思一個小例子:

MyControl ctrl1 = new MyControl(); 
ctrl1.ID = "MyControlA"; 
ctrl1.Text = "Some text"; 
ViewState[ctrl1.ID] = ctrl1.Text; 

MyControl ctrl2 = new MyControl(); 
ctrl2.ID = "MyControlB"; 
ctrl2.Text = "Some other text"; 
ViewState[ctrl2.ID] = ctrl2.Text; 
+0

但是,然後我需要堅持我使用的獨特的價值,我需要使用持久性鍵來保存該值獨特和... – 2011-01-27 12:46:20