none
回发或回调参数无效 RRS feed

  • 问题

  • 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

     

    请问下,打开网页的时候,有时候会出现这个问题,有时候又会直接打开,倒底是什么为什么呢?源代码根本就没有进行更改过。我要如何做,才是正确的?

    2010年9月23日 12:33

答案

  • 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    异 常详细信息: System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation="true"/> 或在页面中使用 <% @ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数 是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    发生条件:
    1。画面有隐藏控件。
    2。多次的GRID绑定。

    发生原因:
    .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"/>

     

    而你的问题个人认为由于AJAX.NET程序执行的时触发了某一个事件元素而引发了异常导致的。你可以试着把关掉该属性

     

    <pages enableEventValidation="false"/>


    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年9月23日 14:29
  • 为什么相同的代码,有的时候,有提示,而有的时候,能正常运行呢?

     

    我是这样理解的(可能有误)。由于ajax部分代码是有js代码构成,鉴于当时网络环境与网速快慢的影响。你在执行页面的同时由于网络环境差部分代码没有完全执行。从而没有触发页面相关事件,这个时候反而你觉得页面执行“正常”  当全部执行ajax代码的时候可能会与我之前所说的事件产生了异常,这个时候你就觉得不正常了。所以说页面是否全部执行了js代码还要看下左下角是否有脚本错误   所以首先把enableEventValidation属性设置为false  再运行几遍程序看看 

    以上是我个人理解


    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年9月24日 2:44

全部回复

  • 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    异 常详细信息: System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation="true"/> 或在页面中使用 <% @ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数 是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    发生条件:
    1。画面有隐藏控件。
    2。多次的GRID绑定。

    发生原因:
    .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"/>

     

    而你的问题个人认为由于AJAX.NET程序执行的时触发了某一个事件元素而引发了异常导致的。你可以试着把关掉该属性

     

    <pages enableEventValidation="false"/>


    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年9月23日 14:29
  • 为什么相同的代码,有的时候,有提示,而有的时候,能正常运行呢?

     

    2010年9月24日 2:19
  • 为什么相同的代码,有的时候,有提示,而有的时候,能正常运行呢?

     

    我是这样理解的(可能有误)。由于ajax部分代码是有js代码构成,鉴于当时网络环境与网速快慢的影响。你在执行页面的同时由于网络环境差部分代码没有完全执行。从而没有触发页面相关事件,这个时候反而你觉得页面执行“正常”  当全部执行ajax代码的时候可能会与我之前所说的事件产生了异常,这个时候你就觉得不正常了。所以说页面是否全部执行了js代码还要看下左下角是否有脚本错误   所以首先把enableEventValidation属性设置为false  再运行几遍程序看看 

    以上是我个人理解


    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年9月24日 2:44
  • 其实是因为你从别的地方复制了aspx代码过来,里面有一些控件,但是designer.cs 文件没有及时更新过来。造成这个错误!

    在vs里面 选择把所有的文件都转化为web应用程序 就没有这个错误了!

    2011年3月18日 17:41