轉載自http://blog.csdn.net/dongge825/article/details/7868151web
關於在同一個頁面中使用Gridview控件的時候發現氣updaeting事件沒法被服務器所響應,看來它的錯誤報警而後查詢了部分資料如今將整理的解決方法總結以下:點擊update 事件沒法響應緣由出在回發或回調參數無效。在配置中使用 <pages enableEventValidation="true"/> 或在頁面中使用 <%@ Page EnableEventValidation="true" %> 啓用了事件驗證。出於安全目的,此功能驗證回發或回 調事件的參數是否來源於最初呈現這些事件的服務器控件。若是數據有效而且是預期的,則使用 ClientScriptManager.RegisterForEventValidation 方法來註冊回發或回調數據以進行驗證。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中致使錯誤的出處的詳細信息。
異常詳細信息: System.ArgumentException: 回發或回調參數無效。在配置中使用 < pages enableEventValidation="true"/> 或在頁面中使用 <% @ Page EnableEventValidation="true" %> 啓用了事件驗證。出於安全目的,此功能驗證回發或回調事件的參數 是否來源於最初呈現這些事件的服務器控件。若是數據有效而且是預期的,則使用 ClientScriptManager.RegisterForEventValidation 方法來註冊回發或回調數據以進行驗證。ajax
看了半天也沒發現是什麼問題,檢查了一遍代碼也是對的,頁面全部控件的ID,屬性都檢查了仍是沒找到問題。後來才發現是這麼回事:安全
發生條件:
1.畫面有隱藏控件。
2.屢次的Gridview綁定。服務器
3.多個Form中嵌套使用。
發生緣由:
.NET基於頁面中的輸出元素會在最終頁面中生成一個__EVENTVALIDATION隱藏字段。作了一個簡單的測試。頁面中建立一個<asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" />,同時建立對應的Click事件處理程序。運行程序,能夠正確響應事件。而後設置btnSubmit.Visable=false,手動在頁面 上面添加<input type="submit" name="btnSubmit" value="Submit" />。運行程序,會出現一個包含EnableEventValidation內容的異常。設置<@Page EnableEventValidation="false">再運行程序,又能夠正確響應事件。觀察先後兩次__EVENTVALIDATION 的內容,能夠發現是不一樣的。關於出現的異常,能夠認爲在輸出的時候沒有包含btnSubmit,但是再提交到後臺的時候卻有相應的內容,先後不一致,因此 在開啓事件校驗的狀況下.NET拋出了異常。
解決辦法1:
Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//綁定數據;
}
}
解決辦法2:
<pages enableEventValidation="false"/>asp.net
一、在頁面的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 中添加 EnableEventValidation="false" 就能夠了。(首先考慮的)
二、經過web.config
<system.web>
<pages enableEventValidation="false"/>
三、是Form嵌套,一個頁面只能有一個Form,仔細檢查代碼就能夠解決。
四、若是頁面含有 DropDownList 或 ListBox這樣的控件,可能如下緣由形成:
4.1 在下拉菜單中使用ajax,常見於省市聯動菜單,多是因爲在aspx頁面賦給了下拉菜單初始Item值,在事件回發時提示該錯誤,將下拉菜單初始Item值刪除,在綁定事件中添加Item項。
4.2 緣由是 DropDownList 控件的ListItem 的Value 屬性 包含漢字.只要將Value 改成英文或數字的就好了.最好在web.config中添加以下語句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>由於 POSTBACK 若是不採用 UTF-8 編碼, JAVASCRIPT 會認爲有問題。
只改 requestEncoding="utf-8" 就能夠了,responseEncoding="utf-8" 不用
5.Register For Event Validation
其原理就是讓asp.net記錄這個postback value.
RegisterForEventValidation必須在render時調用.post