2010-10-14 40 views
1

我正在尋找在DropdownList自動回發之前觸發的事件,以便在ViewState中保存Listbox項目(使用JS填充)。在回發之前在ViewState中保存數據的事件

我嘗試了OnSelectedIndexChanged事件,但它被解僱得太晚。

可以這樣做,以及如何?

+0

你是否試圖通過客戶端代碼修改視圖狀態? – David 2010-10-14 16:13:31

回答

2

這不能使用ViewState來完成。 ViewState由服務器設置。它不能被JavaScript中的客戶端修改。

推薦的JavaScript或jQuery的其中一個選項:

  • 修改隱藏輸入
  • 修改cookie的值

然後,您可以檢測這些變化的頁面已經調回後。

設置您的下拉菜單來修改隱藏的元素。

$(document).ready(function() { 
     $('#<%=DropDownList1.ClientID %>').change(function() { 

     $("#myHiddenInput").val("changed!"); 

     }); 
}); 

.... 
<input type="hidden" id="myHiddenInput" /> 

您的DropDownList將按照正常發回。

0

您是否嘗試過OnChange事件?看看this post
更新:使用隱藏字段將自定義數據傳遞到服務器端。你不能修改視圖狀態。
另外,斯科特米切爾關於這個there is a nice post

+0

我不能使用像「OnChange」這樣的JS事件,因爲我需要保存到ViewState(服務器端)... – Spilarix 2010-10-14 16:20:41

+0

嗯,我認爲你會走錯方向。 **後面代碼中的EVERY **方法將在**回發後被解僱**。實際上,說你想在回發之前的代碼中觸發一個方法是沒有任何意義的。您必須使用JS才能在回發之前調用方法。 – Kamyar 2010-10-14 16:24:18

+1

在做回發之前,在服務器端做些事情就像在早餐時吃早餐燻肉一樣。 (除非你使用ajax,但我認爲這不適用於這個問題) – 2010-10-14 16:25:42

1

以下事件中的所有頁面加載之前發生:

  • PreInit
  • 初始化
  • InitComplete
  • 預緊

看看在ASP.NET Page Lice Cycle瞭解更多信息。

LoadViewState發生在頁面的Load循環中,因此請查看之前的事件。

另外,你有沒有看過使用TrackViewState方法?可能只是你在這種情況下需要的...

0

我知道你已經標記了這個問題的答案,但我認爲你之所以問的原因是你的viewstate驗證失敗,因爲你的列表框不再包含與頁面呈現時相同的選項?簡單的答案是在頁面上禁用事件驗證:

<%@ Page EnableEventValidation="false" %> 

在你的榜樣,因爲你X許多項目填充列表框時,頁面被渲染,並且您手動添加項目,ASP。 NET開始並且去「嘿,你要求選項不存在」,並且相應地拋出異常。

相關問題