2013-02-06 57 views
3

大約5個月前,我的任務是爲我當前的僱主創建一個新的Intranet站點,因爲舊的是一個與之合作的噩夢。該網站使用多個.NET語言(classic asp,VBC#)與多個.NET frameworks(1.0,2.0,3.5,幾個地方4.0)。只需要花費一個小時來實施和測試的簡單更改需要幾天才能實施。娛樂的用戶控制中的動態控件基於在另一個用戶控件中的選擇

新的Intranet網站內容通過用戶控件進行控制,該控件在加載時根據您所在的頁面和您擁有的訪問級別進行動態加載。每個用戶控件都有一個特定的任務,不會影響頁面上的任何其他用戶控件。

大約3個星期前,我的數據庫人員(他是他最後一份工作中的應用程序開發人員)將此想法傳達給中層管理員,用戶控件可以相互交談並影響每個用戶控件中的可用選擇(所有這些我的知識)。

起初,當我聽到時我不認爲這是可能的。然後,我讀到的關於使用戶控件相互通信的所有信息都表明,用戶控件必須知道彼此,這是不可能的,因爲所有用戶控件都是在運行時根據您擁有的訪問級別加載的。上週我發現了一個解決方案,我可以讓用戶控件觸發一個自定義事件處理程序,並讓我的其他用戶控件監聽該特定自定義事件處理程序。

現在,今天我被問到是否可以向網站的聯繫人管理部分添加過濾功能,該功能列出了我們的所有客戶端,類似於Ebay在左側有過濾器,可讓您深入查看結果回。例如,您搜索「純平電視」。易趣將列出與您搜索相匹配的所有結果,在左側您可以選擇尺寸範圍或品牌來縮小結果範圍。

在頁面我設置我加載3個用戶控件來處理條件和結果。 Control1擁有所有基本搜索條件(例如行業,地區狀態等),control2具有用於從control1下鑽結果的過濾器。 Control3顯示基於control1中的標準的客戶端(因此,control1觸發control2control3聽到的事件,並且它們都顯示基於control1的結果)。現在我從control2中選擇標準,並觸發control3可以聽到並顯示結果的事件。

所有這一切工作,我遇到的問題是,在control2控件是動態生成的,當在control1事件被觸發 - >然後control2回發到火control3事件聽到我失去所有的動態控件control2,因爲無法在Page_Init中重新創建控件,因爲從控制1中的自定義事件傳入的值不再存在,因爲control2執行了回發,而control1的事件僅在control1回發時觸發。將的值從control1的自定義事件中存儲到control2時,或者control1control2回發,所以我可以在control2中重新創建動態控制,請將存儲的值存儲到control2中的最佳方式是什麼?

注意:我嘗試過使用會話,但在第一次搜索後無法重新分配control1的值。我相信他們不工作的原因是由於我有control1設置的方式,並且在control2中創建的動態控件正在跳過獲取會話值。

我感謝你們所有人提前爲你(希望)有幫助的迴應。

更新
原來,我在我的默認頁面運行時加載我的用戶控件的方式就是爲什麼在「控制2」的動態控制時,「控制2」調回並沒有被重建的原因。我的默認頁面加載了'page_load'而不是'page_init'的usercontrols(必須忘記像所有其他頁面一樣將usercontrol加載到'page_init')。製作開關並在回發時重新創建動態控件。

將我的代碼從'page_load'移動到'page_init'後,唯一的問題是'checkbox'控件在回發時未被選中,即使我檢查了它們。我能夠通過幾個會話變量來解決這個問題。

回答

0

這是一個常見問題。

只有在您的page_init事件中動態創建的控件才能在回發後存活。

page_init期間,動態創建的控件成爲DOM的一部分,從而具有sessionstates。如果您可以在page_init期間重新分解您的代碼以激發動態控件創建,則您的控件應該可以繼續使用。

更新:

我從你的評論和帖子,你是不願意使用會話實現。問題是會話是保存控件的唯一方法。

  • 我處理這種情況的一種方法是創建一個帶有控件列表的類對象。當我回到頁面時,如果Object存在,我將它用作默認值。
  • 我接觸到的第二種方式是在Session中保存搜索條件並將條件提供給我的動態控件創建方法。
+0

我知道我需要在page_init期間重新創建控件。我遇到的問題是我需要重新創建完全相同的控件所需的值,這些值基於傳遞給control2的值control1會在control2回發時丟失。我正在尋找最好的方法來存儲從control1傳入control2的值,以便在control2回發時重新創建control2中的控件。 – user2045365

+0

我明白了。也通過這個。我明白你說你不能使用Session。我做到了。我用列表創建了一個複雜的類並存儲了該列表。我檢查它是否返回非空,如果它填充,我用它來重新創建我的報告。不華麗,但有效。 –

+0

閱讀我更新的帖子。這顯然不是你想聽到的,但它是我聽說過的唯一方式(有很多搜索)。 –

相關問題