首页  ·  知识 ·  云计算
回发或回调参数无效
佚名  http://hi.baidu.com/jantouy/blog/  综合  编辑:dezai  图片来源:网络
回发或回调参数无效。在配置中使用 pages enableEventValidation="true"/ 或在页面中使用 %@ Page EnableEventValidation=

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

在网上找到几种解决方案

1.将改为,但是这样取不到客户端增加的值。

2.将dropdownlist的value值设为数字或者英文,不要使用中文。我尝试了一下,没有成功。

3.使用RegisterForEventValidation注册客户端控件的值。

可能还有别的方法,不过我没有注意到。我是参考的第三种方法实现的。

解决方法:在Page_Load之前加入如下代码

protected override void Render(HtmlTextWriter writer)
    {

         ClientScript.RegisterForEventValidation(DropDownList1.UniqueID, "argument");
        base.Render(writer);
    }

DropDownList1就是你要使用客户端脚本动态增加内容的控件,而argument就是你要加入的值。例如本来DropDownList1是空的,你用脚本为它增加了“中国”,“美国”等值,这里的代码就改成

ClientScript.RegisterForEventValidation(DropDownList1.UniqueID, "中国");

ClientScript.RegisterForEventValidation(DropDownList1.UniqueID, "美国");

原理:就是因为vs2005的这个数据验证问题了,"在asp.net render DropDownList 时,会遍历DropDownList的item,并记录所有可能的postback的值,计算的结果会被保存在page中,

       name="__EVENTVALIDATION"
       id="__EVENTVALIDATION"
       value="/wEWBQKGg9abDQKd9sHMBgKc9s…….."
/>
这个过程发生在control的Render()方法中
当页面postback时,ASP.NET会根据这个隐藏值检查postback values,如果找不到对应信息,就会报错"(引自http://recordsome.blogsome.com/2006/05/

所以我们重写Render,将由脚本加入控件中的值加入到隐藏值中,就不会出现找不到相应信息的错误了。

本文作者:佚名 来源:http://hi.baidu.com/jantouy/blog/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读