2012-02-13 52 views
1

也許有人可以幫助我。我創建了一個簡單的Web用戶控件,一個日期和時間選擇器,可以放到我的webform上。這一切都很好地工作,我可以設置屬性,使用控制令人滿意的UI等網絡用戶控件持久屬性(視圖狀態,會話,上下文)我是否缺少東西

當談到「使用」控件selected_date_time屬性,我只是不能讓它堅持。沒有......我已經使用視圖,上下文和會話進行了無休止的研究和嘗試。 Onbiouosly會議雖然有效,但它很髒,而且我使用了這個控制的兩個副本(開始和結束時間),所以會話變量確實需要被破解以便開展工作。

我錯過了什麼嗎?控制在每次發生時都會被初始化,並且明顯地失去了它的狀態信息。 ui保持其狀態,因爲我可以選擇一個日期,將該日期寫入標籤,並且這個日期仍然存在。但是,當我嘗試訪問控件的屬性以檢索選定的組合日期和時間時,(它已經在視覺上持續存在),但它什麼都沒有。我調試過,每當我在頁面上做任何形式的帖子,它都會被初始化。

有人可以請爲我闡明這一點嗎?它現在真的開始成爲一個問題。

在此先感謝。

實施例:(簡單的部件)

UC _ save_method

ViewState("var_time") = "My veiwstate text" 

形式_read_method

dim str as string = ViewState("var_time") 

形式看到沒有在視圖狀態變種

我也試過它與正常的屬性和值,這是不工作,這就是爲什麼我移動到我的屬性意見var的。現在,我只是想讓視圖狀態即使沒有屬性也能工作。

似乎我的形式和控制必須有兩個獨立的視圖狀態?關於視圖狀態,我有點不滿意。

感謝

[解決方案] 你必須在控制的預渲染方法明確重置屬性。我的誤解是,頁面和控件共享相同的單一視圖狀態。發現它的控件和頁面有其獨立的視圖狀態。因此,在你的控件的屬性設置函數中,在viewstate中設置你的值,並且在預渲染時,取這個viewstate值,並設置屬性get variable = - viewstate中的值。

您現在可以訪問您的頁面屬性彷彿一切正常,世界上沒有結束... pheww

感謝cnay指導我。

'Usr control xyz

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

my_time = ViewState("var_time") 'my_time is the get variable for property date_time

End Sub

'page use

xyz.date_time

+0

我們需要更多信息來幫助你。你能發佈代碼嗎?顯示例子? – 2012-02-13 08:00:27

+0

嗨,我已經添加了,例如 – 2012-02-13 08:05:38

回答

2

也許,你應該張貼完整的控制代碼,以獲得更好的答案,但籠統地說 - 視圖狀態(或控制狀態)是持續控制狀態,如特性通常正確的做法。每個控制實例獲得不同的視圖狀態包,因此容易避免衝突。

現在,遇到問題時,典型的可編輯控件首先將其狀態從視圖狀態恢復,然後使用請求數據根據需要修改狀態。例如,一個簡單的文本框控件將其文本值保持在視圖狀態。在回傳時,文本值將從視圖狀態恢復,然後被請求中存在的值覆蓋(由UniqueID屬性查找)。

現在,對於用戶控件,通常可以使用子控件值(或屬性)來派生控件值/屬性 - 因此它們可能不使用視圖狀態。但是,如果您添加未由子控件備份的屬性/狀態,則可能必須將它們備份到視圖狀態。因此,假設您的用戶控件有兩個子控件 - 一個用於Date和其他時間,然後可以組合它們的值以獲取控件的選定日期時間值。

+0

好的,謝謝你的回覆。我想我知道我在哪裏丟失它,當它初始化時,我肯定不會「恢復」控件中的任何屬性。這可能是我的問題。是否像prerender,property = viewstate一樣簡單?然後在我的表單上訪問該屬性? – 2012-02-13 08:35:57

+0

謝謝你,這是爲mw做的..看,我的教育關於視圖狀態有一個小的差距:-)。它是一個可疑的地方,它不在任何地方明確提及,我必須通過視圖狀態閱讀20篇文章/文章,沒有人明確表明這一點。受保護的子Page_PreRender(BYVAL發件人作爲對象,BYVAL e作爲System.EventArgs)處理Me.PreRender my_time = ViewState(「var_time」) End Sub – 2012-02-13 08:41:30

+0

我加入解決方案 – 2012-02-13 08:42:07