2011-09-28 28 views
0

我有一個會話變量,它改變了一些關於頁面外觀的事情。我有一個改變這個會話變量值的按鈕。但是... onClick事件發生在頁面加載後,所以當我更新基於按鈕點擊的會話變量時,已經太晚了,頁面已經被加載。在asp.net中重新加載當前頁面

理論上我可以把所有關於將顯示變成函數的邏輯,並從頁面加載中調用它,然後在變量更新之後再次從onclick調用它。但這是不切實際的:有許多用戶控件檢查值,在不同的頁面上以不同的組合使用。我必須對每個頁面上的用戶控件列表進行硬編碼,並且如果有人向特定頁面添加了新的用戶控件,他們必須記住更新此功能,這是跛腳的。

有沒有辦法強制頁面重新加載? (我可以使用response.redirect回到我自己,它的工作原理,如果一切都失敗了,我想這是我要做的,但這意味着一次額外的往返服務器,這是笨拙的。)

Is there在頁面加載之前處理onclick的方法?

一些其他的魔法解決方案?

+0

On_click在會話變量中設置值併爲同一頁面進行重定向調用Response.redirect(「YourPage.aspx」) –

+0

@EmaadAli - 閱讀問題。該選項已被OP提及。 – Oded

+0

我知道。我有這個想法,所以我再次提到它。 –

回答

3

如果您必須根據可更改的特定值更改頁面的外觀和風格,那麼您應該有專門的功能,在單一的統一位置設置外觀,然後在每個調用影響外觀和感覺的值的情況下調用這些函數。

例子:

private void SetDivVisibility() 
{ 
    // display logic here based on variables 

} 

private void MyControl_Click(...) 
{ 
    myvalue = blah; 
    SetDivVisibility(); 
} 

它有助於記住該頁面的實際呈現是出現這種情況,無論是頁面加載和事件處理後,最後一件事。

+0

捕捉到的是,大約有15個用戶控件測試標誌以改變它們的外觀,而不同的頁面使用不同的組合。因此,我必須保留每個頁面上的控件的單獨列表,以瞭解要修改哪些控件,並且在頁面更改時必須更新。這似乎是一個等待發生的維護錯誤。 – Jay

+0

每個頁面*已經*知道哪些控件住在它上面。因此,每個頁面「SetDivVisibility」或「SetLookFeel」都可以包含對每個控件的「SetLookAndFeel」方法的調用。你的控件可以知道如何改變它們的外觀,但是頁面應該告訴它們什麼時候測試以改變它們的外觀,因爲它是知道值何時改變的頁面。 –

+0

好吧,顯然ASP知道頁面上的控件。有沒有辦法讓我的手在名單上?當然,我仍然必須有一種方法來「追溯」確定哪些控制措施受到了國家變化的影響。其實我現在正在重構他們的用戶控件,而不是沒有特色的asp:超鏈接。 – Jay

2

理論上我可以把所有的邏輯有關更改顯示成一個功能和頁面加載

這就是你怎麼應該做調用它。清理你的邏輯和標記 - 重構並保留它DRY。這應該有所幫助。

我可以使用Response.Redirect回到自己

那是另一種選擇。是的,往返旅程令人討厭。

0

你可以把你在通過在Page_Load通常被稱爲無效造型網頁的代碼,並從buttonclick

再次打電話或致電的Response.Redirect到相同的URL

甚至是的onClick客戶端使用窗口.location.href

0

一個佈局是基於會話變量的存在而設計的,它在渲染之後纔會存在,這是一個巨大的設計錯誤。我喜歡稱它爲「雞還是蛋」綜合徵。 (是的,你可以引用我..;)

我認爲你的控件不應該得到他們的佈局在渲染完成。相反,使用一種方法(類似於數據綁定),您可以根據需要使用新的會話值「重新綁定」控件。此方法會根據更新後的值顯示/隱藏內容。

+0

我同意你所說的原則,但是如何?控件必須包含在aspx標記中。然後他們會在下載時間內完成構建。那麼,我想我可以編寫代碼來動態地將它們添加到文檔樹中,與純ASPX頁面分開,但我真的不想這樣做。我用一堆Javascript做了一次,它的工作,但它超級醜陋。 – Jay

+0

@Jay:看到Oded的回答。他死了。基本上,控件的屬性應該在page_load期間設置。一旦設置了這些屬性,就調用一個方法,使控件顯示/隱藏他們需要的任何內容。 – NotMe