2008-09-24 53 views
1

我在ASP.Net網站中創建有狀態的動態內容有什麼選擇?ASP.Net中動態內容的選項

這是我的場景。我有一個擁有多個嵌套內容區域的網站。最高級別是與功能區域Catalog,Subscriptions,Settings相關的操作。

當您點擊功能操作時,我想動態添加特定於該操作的內容。例如,當單擊「目錄」時,我想顯示一個目錄文件夾爲&的文件樹,右側爲一個區域以獲取詳細信息。

當用戶單擊樹時,我想要在詳細信息區域中加載上下文敏感的詳細信息(如用於管理文件的屬性或選項)。


我開始於UserControls。只要我一直將所有內容加載到頁面中,就不會讓它消失。一旦消失,頁面的ViewState因視圖狀態樹無效而爆炸。

(我不想讓裝載的東西進入我的頁面,因爲我不想響應過於龐大)

所以,我的下一個方法是用IFrames來代替我活力的地區。然後,而不是實例化UserControl,我只需更改我的IFrame上的源代碼。由於IFrames的內容是獨立的頁面,我沒有遇到任何ViewState問題。

但是,我擔心IFrames可能是一個糟糕的設計選擇,但不完全明白爲什麼。該網站不公開,所以搜索引擎不是一個問題。


所以,最後到我的問題。

這種情況下我有什麼選擇?如果我選擇Ajax解決方案(jQuery),我是否必須維護自己的ViewState?我應該考慮其他因素嗎?

回答

1

其他一些選項:

  1. 內容僅出現是動態的。你在頁面上加載了足夠的控件來處理任何事情,只有實際上顯示你需要什麼。這樣可以節省很多麻煩與查看狀態等,但意味着您的網頁有更大的佔地面積。
  2. 動態地將控件添加到頁面。你已經玩過這個,所以你在這裏看到了一些問題。請記住,爲回發創建動態控件的位置在Page_Init()事件中,如果您希望它們是有狀態的,則需要將該狀態保持在某個位置。我推薦一個數據庫。
1

你有很多不同的選擇,是的,IFrames是一個糟糕的設計選擇。

第一個選項是AJAX解決方案。並且,由於沒有真正的視圖狀態,它只是通過Web服務器來回傳遞數據,並根據需要隨時創建UI。

下一個選項是動態添加給定帖子所需的控件。這樣做的方式是,在頁面生命週期開始時,您需要完全按照上次發送的頁面重新構建頁面,然後轉儲出所有不需要的控件,然後構建所需的控件。

第三種選擇是使用母版頁。您的頂級內容可能位於母版頁面上,並可鏈接到網站中的各個頁面。

我敢肯定,給予足夠的時間,我能想出更多,但這些僅僅3出現讀取您的問題。動態添加

+0

我在這裏給出的任何答案都是用不同的方式說出來的。很好的答案。 – KevDog 2008-09-24 01:33:37

2

控件不在視圖狀態持續下去,這就是,如果你使用AJAX或iFrame或什麼都無所謂的原因。

一種可能的解決方法是在回發上重新填充控件。這樣做的問題,是頁面生命週期(簡體)是:

  1. 初始化
    • LoadViewState
    • 加載回發數據
    • 呼叫控制負載事件
    • 呼叫負載事件
    • 呼叫控制事件
    • Control PreRender
    • 的PreRender
    • SaveViewState
    • 卸載

這意味着要重新添加動態控件的唯一地方就是初始化 - 否則發佈的數據(或視圖狀態信息)沒有加載到該控制。但通常,由於Viewstat /回發數據在Initialize中尚不可用,因此您的代碼沒有所需的信息來確定需要添加哪些控件。

我發現在這種情況下唯一的其他解決方法是使用名爲DynamicControlsPlaceholder的第三方控件。這工作得很好,並將控制信息保存在視圖狀態中。


在你的具體情況下,它似乎並沒有那麼多的選擇/案例。只是在頁面中擁有所有不同的控件集合,並將它們放入asp:佔位符控件中,然後根據選擇的內容將其設置爲可見,這是否實用?

+0

我的例子過於簡單。無法在內存中擁有所有控件,這將會太大(> 150個選項)。 我有控件使用viewsate(在init中創建,加載到表單中),當我嘗試刪除回發後出現問題。 – 2008-09-24 02:16:23

1

動態控件和視圖狀態不拌勻,如上所述 - 但是這是一個好事,因爲即使他們做了一個複雜的動態頁面視圖狀態會變得這麼臃腫,業績將減少到零

使用Ajax [我喜歡AJAX PRO,因爲它使用起來非常簡單]並自己管理頁面狀態[在會話,數據庫表格或任何適用於您的場景的內容]。這會稍微複雜一點,但結果將是高效且響應的:每個頁面只能更新需要更改的內容,並且您不會一直在來回吹動巨大的視圖狀態字符串