我有一些在母版頁上設置的值,我想保存在回發中。然後,我希望這些變量在其加載事件期間可用於使用該母版頁的頁面。asp.net母版頁和視圖狀態
足夠容易在母版頁上創建屬性。所以我第一次嘗試說,在母版頁的加載事件期間,如果不是ispostback,那麼生成值並將它們保存到視圖狀態,否則從視圖狀態讀取它們。
除了......顯然常規頁面加載事件發生在主頁面加載事件之前,所以當我試圖讀取它時數據還沒有存在。
第二次嘗試:在Init事件期間讓主頁面設置或檢索這些值。沒有運氣。顯示視圖狀態未由Init時間填充。
據我所知,在視圖狀態填充之後但在主頁面的Load事件之前,母版頁上沒有事件發生。
我想每個頁面都可以有一個InitComplete或PreLoad來調用一個函數來填充這些字段,但這看起來很笨拙。電話必須在每一頁。即使該頁面從未使用過這些數據,它也必須位於每個頁面中,因爲主頁面使用這些數據來達到自己的目的。
有沒有辦法做到這一點?也許視圖狀態不是保存數據的正確位置?我可以將數據存儲在會話變量中,但之後不會回發,它們中的數據將從最後一次調用中遺留下來。我想我可以確保清除過時的數據,但這似乎很笨拙。
我在VB寫的,但我不認爲這會在這裏有所作爲。
Hm ...如果您將這些數據存儲在主頁上的公共變量或屬性中,您可以通過添加一個'@ MasterType'指令來訪問它,這可以讓您執行類似'MyCompany.Text = Master.CompanyName'。 [更多信息](https://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx)。雖然,我不確定這會落入主子頁面載入週期,也不會解決您必須修改每個子頁面的問題。 – Santi
@santi是的,這正是我正在做的。問題是沒有從子頁面訪問母版頁變量,它在子項的Load事件之前獲取了母版頁變量。 – Jay
哦,也許我應該澄清一下:是的,我希望每個子頁都必須說,foobar = master.foobar或任何它需要處理來自母版頁的值。每個子頁面都需要它自己的代碼來完成此操作。捕獲是在孩子的Load事件發生之前填充master.foobar。我希望孩子不必做任何事情來使人口發生,因爲母版頁也需要這些數據,我不希望主人依賴於孩子在正確的時間觸發人口。孩子應該依靠父母,而不是父母對子女。 – Jay