2012-03-13 70 views
3

使用ASP.NET 4.0 WebForms。 我有一個複選框的中繼器。中繼器和複選框啓用了視圖狀態。有一個按鈕導致回調回發。這些元素駐留在一個callback面板中(類似於MS的UpdatePanel,但不使用viewstate)。中繼器在初始加載期間綁定到數據表,複選框顯示覆選框。迄今爲止很好。轉發器中的項目在回發期間丟失(回調)

在回發(回調),我注意到,中繼器的項目計數是在Page_Load 0。因此我無法獲得任何複選框值。我可以在Request.Form集合中看到複選框的鍵/檢查值條目。

我覺得我缺少在生命週期的東西很明顯,但在那裏我可以閱讀直放站的項目? 或者我應該從Request.Form獲取它們嗎?

+0

你想在哪裏閱讀它們?向我們展示一些代碼。 – 2012-03-13 21:52:00

+0

我想在page_load或更高版本中閱讀它們。 – 2012-03-13 22:08:51

回答

3

1)嘗試接線到LoadComplete。所有子控件都是遞歸加載的,所以有時在Load事件期間,您所期望的所有內容都不會存在。

2)確保您的中繼器在Init事件期間或之前被初始化。如果您有一些運行的代碼來填充它,那麼這必須在Init中執行。在頁面的生命週期中,ASP.NET嘗試獲取發佈的值並將其應用於控件。如果控件在生命週期內沒有儘快創建,那麼在該步驟中它們不會存在以接受發佈的值。這是ASP.NET中動態頁面更令人沮喪的事情之一,因爲您必須確保頁面在init中的回發期間進行重構。因此,即使在帖子中看到數據時,如果在其控件集合中找不到控件,ASP.NET也會忽略它。此外,還有一些使用控件ID發生的魔術,用於將發佈的值映射到控件中。我不記得那些細節,因爲我已經鑽了好幾個星期了,因爲我不得不鑽研哈里的細節。

此外,還要確保你沒有做這樣的事情,如果使用(!的IsPostBack)來初始化中繼器或其它控制/數據。即使它是回發,仍然需要存在控件才能接受發佈的值。

我沒有用一個callbackpanel雖然,所以我不確定這將如何把水攪渾。

1

我通過覆蓋在包含中繼控制的DataBind方法解決我的問題。阻止父控件上的DataBind在未準備好的情況下將數據遞減並綁定到中繼器。我的問題是一個父控件/頁面執行了一個DataBind,它傳遞給子控件,包括重排,導致它被清除。 所以你不必直接做DataBind中繼器上像@AaronLS每次回傳提示:

此外,還要確保你沒有做這樣的事情,如果使用到 初始化(的IsPostBack!)您的中繼器或其他控件/數據。即使這是 回發,您仍然需要控件存在,以便他們可以接受 發佈的值。

我所有的RepeaterItems都通過回傳保持存在,即使我只有一次數據綁定。

在我的情況下,中繼器上的每一個回發執行DataBind引起形式值復位。

+0

而不是重寫控件上的DataBind,爲什麼不避免Page.DataBind(如果可能的話)? +1幫助我! – Nurp 2014-03-18 13:29:01