2009-12-28 16 views
0

有什麼方法可以檢查在asp.net webforms頁面/控件生命週期中觸發了哪些事件?快速檢查控件所在頁面生命週期的哪個部分在

我知道我可以爲每個事件手動添加處理程序,但這似乎有點......效率低下。

有沒有可視化器,或者我可以檢查的屬性,它會告訴我這些事件是否已經解僱?

編輯 我想知道這個的原因是,我重寫自定義控件的ViewState屬性和視圖狀態在某些時候就消失了,我想知道在這一點在頁面生命週期它正在被覆蓋。

+0

從哪裏檢查這個?據推測,如果你正在asp.net頁面中運行代碼,你知道你在生命週期中的位置...... – womp 2009-12-28 23:08:01

+0

我試圖重寫ViewState屬性,並且viewstate在某個時候被清除,我想知道那點是什麼。 – Khanzor 2009-12-28 23:24:33

+0

你可能想評估你在做什麼。爲什麼視圖狀態在某個時間點被清除可能是有充分理由的。將這種行爲考慮在內可能會產生一些不可預料的後果。 – Gregory 2009-12-28 23:34:03

回答

0

我再一次回答我自己的問題。

我想要做的是確定在頁面生命週期中觸發了哪些事件。

這實際上很平凡:在web.config中啓用跟蹤,然後轉到〜/ Trace.axd以查看已激發的內容。

0

事件在.NET中的工作方式是,你註冊你對它們的興趣,當它們被解僱時,框架會調用你的處理程序。我不知道任何可視化器或財產告訴你在生命週期中的哪個位置,除了知道你在哪裏。

在MSDN上,ASP.NET Page Life Cycle Overview給出了一個很好的描述,當你在頁面或控件上做的所有事情都將作爲其中一個事件處理程序的一部分時,你應該能夠找出在哪裏在你的過程中。


編輯補充

SaveStateComplete事件引發一次等完成保存他們的詳細資料向ViewState的所有控件 - 這是你的代碼也許應該去。

控件可以對ViewState進行更改 - 通常會在PreRender事件(在SaveStateComplete之前觸發)中進行更改。

你在做什麼樣的改變?

0

頁面和控件事件以非常嚴格,非常可預測的方式觸發。在轉到下一個事件之前,Page和所有控件處理一個事件。所以如果你把你的代碼放在頁面中,你可以確切地知道在所有相關的控件中發生了什麼。

但是,直接覆蓋ViewState並不安全;控件取決於它。相反,您可能會考慮重寫頁面上的SavePageStateToPersistenceMedium()LoadPageStateFromPersistenceMedium();他們給了你很多對ViewState終極配置的控制權。

如果有幫助,我會在我的書中涵蓋這些方法和其他相關優化:Ultra-Fast ASP.NET

+0

感謝有關viewstate的提示,但我真的只是想知道如何確定在給定時間點在頁面或用戶控件上觸發了哪些事件... – Khanzor 2009-12-30 03:19:19

+1

您是什麼意思「在給定的時間點「?通常,這將對應於某些代碼,並且該代碼將駐留在事件處理程序中,並且該處理程序的相應事件將指示哪些其他事件已經觸發。 – RickNZ 2009-12-30 11:10:11

+0

那麼,如果我重寫了一個屬性,我想知道頁面中引發了哪些事件來調用該屬性。這實際上只是爲了節省我在頁面中指定每個覆蓋,並在每個事件中設置一箇中斷點以查看頁面引發了什麼事件。 – Khanzor 2010-01-02 08:06:17