這兩天開發的時候碰到一個問題:在用AJax做了聯動的下拉框之後使用服務器的按鈕事件報錯:
回發或回調參數無效。在配置中使用
或在頁面中使用 <%@ Page EnableEventValidation="true" %>啟用了事件驗證。出於安全目的,此功能驗證回發或回調事件的參數是否來源於最初呈現這些事件的服務器控件。如果數據有效並且是預期的,則使用 ClIEntScriptManager.RegisterForEventValidation 方法來注冊回發或回調數據以進行驗證。 到網上查了一下,這個錯誤一般的解釋都是:
目前為止遇到的出現情況有兩種:
一是Form嵌套,一個頁面只能有一個Form,仔細檢查代碼就可以解決。
二是在下拉菜單中使用AJax,常見於省市聯動菜單,可能是由於在ASPx頁面賦給了下拉菜單初始Item值,在事件回發時提示該錯誤,將下拉菜單初始Item值刪除,在綁定事件中添加Item項。
給出的解決方法有一些,經測試僅有一個方法有效:
在後代碼中使用Request.Form["DDLcity"]; 來獲取相關dropdownlist的value值,而不能使用DDLcity.SelectedValue來獲取。大概的原因是因為AJax改動了頁面的內容,回送到服務器的頁面內容中的控件值就不再正常,只能通過原始的方法獲取。
這樣的結果就是很不方便。而且在頁面再次送到客戶端的時候會導致Dropdownlist控件的內容紊亂,AJax的優勢失去了,需要在服務器端根據傳回來的信息重新設置dropownlist的內容。現在還沒有很完美的解決方案。
沒有試過微軟的AJax,不知道是否有同樣的問題,想來是應該沒有的。