2012-03-07 53 views
0

問題: 我加載基於在父頁RadTabstrip控件中選定的選項卡的幾個用戶控件之一。我捕獲了選定的選項卡,並將其分配給OnTabClick事件中的Session變量,以便在每個用戶控件中使用,以確定是否需要呈現該特定控件。你可以強制頁面渲染後加載

原因是因爲每個用戶控件都會查詢一個數據庫來渲染不同的圖表,而且我不希望每次回發到服務器都會發生不必要的處理。我想補充一點,每個用戶控件在其標記中都有幾個標籤,它們只能根據從數據庫中檢索到的內容獲取在運行時期間分配的文本值。

當我加載主頁面時,每個用戶控件都會檢查選中的選項卡變量,並且在該範圍內一切正常。 (索引0的第一個選項卡沒有圖表)

問題是當我選擇一個具有用戶控件的選項卡時,從數據庫中獲取數據並構建圖表的適當代碼正常工作,但TEXT值標記中的標籤控件不會顯示在頁面上,儘管TEXT值是在數據被重新獲取的同時在代碼隱藏中設置的。

如果我執行相同頁面的回發,將顯示Label控件的TEXT值。

我相信這是因爲其中包括標記的渲染頁面生命週期的第一個階段是不觸發用戶控件上的初始加載,但在隨後的重新加載或頁面的刷新會被解僱。

有沒有辦法解決這個問題?點擊數據庫後,我正在調用Render事件,但我可能會基於我的想法離開。

任何人都可以提供一些建議或潛在的解決方案?

感謝

+1

它絕對聽起來好像你的用戶控制數據被映射到用戶控制標籤到晚了。何時以及如何創建用戶控件?這聽起來像你在OnTabClick方法中這樣做,這應該不是問題,因爲用戶事件在Page_PreRender()之前觸發,這是您發送給客戶端之前修改頁面的最後機會事件。 – 2012-03-07 15:51:40

+0

UserControl是靜態的,並且已經在網站中創建。層次結構是:主頁面,子主頁面,ASPX頁面,然後是在ASPX頁面中使用標籤名稱和前綴註冊並在div標籤中添加到該頁面的用戶控件。當站點加載ASPX頁面時,加載併爲每個UserControl呈現標記。如果我刪除了條件檢查並僅允許構建所有控件,則問題不會發生;但是,我有其他問題不斷查詢每個UserControl在回發數據庫。表現的殺手。 – Mark 2012-03-07 16:18:59

回答

1

我從來沒有能夠解決這阻止標籤的文本出現,直到我的網頁手動刷新後,讓我走近這個問題從不同的角度後期綁定問題。如果用戶選擇了相應的選項卡,我仍然保留只允許每個用戶控件的數據填充的邏輯,但我將嵌入在我的標記中的內嵌代碼移到了我的代碼隱藏文件中。

我並不完全確定標記與代碼隱藏的處理順序,所以我研究並發現,首先處理在aspx頁面中聲明的任何東西,然後創建對象然後在後面的代碼中進行訪問或更新。 因此,通過這些信息,我完全分離了這兩者,並能夠在標籤上呈現文本而沒有任何問題。

我仍然想知道強制頁面調用Render事件來模擬或模仿初始Page_Load之後的手動回發的適當方法,但與Page Cycle的流程相比更容易,可能是更好的做事方式。

0

解決您的問題的一種方法是考慮使用「更新面板」。它將允許您呈現整個頁面,然後在事件上僅刷新更新面板的區域。

通常我會喜歡這個功能出於性能原因,但有一個問題。某些瀏覽器(例如Safari和Opera版本)無法正確呈現這些內容。您的應用程序是供消費者通用的Web應用程序嗎?如果是這樣,你可能需要考慮在同一頁面上刷新整個頁面並傳遞用戶數據(除非Opera /其他瀏覽器已經修復了這個缺點 - 我還沒有在4個月內進行過測試)。