vs2005下,"回发或回调参数无效"的解决方法

vs2005下,"回发或回调参数无效"的解决方法

还是前几天发现的问题,原来在vs2003下使用的ajax无刷新联动代码,放到vs2005的项目后就会出现错误

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

在网上找到几种解决方案

1.将<pages enableEventValidation="true"/>改为<pages enableEventValidation="false"/>,但是这样取不到客户端增加的值。

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中,

<input type="hidden"

       name="__EVENTVALIDATION"

       id="__EVENTVALIDATION"

       value="/wEWBQKGg9abDQKd9sHMBgKc9s…….."

/>

这个过程发生在control的Render()方法中

当页面postback时,ASP.NET会根据这个隐藏值检查postback values,如果找不到对应信息,就会报错"(引自http://recordsome.blogsome.com/2006/05/

所以我们重写Render,将由脚本加入控件中的值加入到隐藏值中,就不会出现找不到相应信息的错误了。使用这个方法后,取数据时使用Request.Form("DropDownList2")取值.

posted @ 2008-06-06 11:56  XGU_Winner  阅读(658)  评论(0编辑  收藏  举报