Asp.Net 2.0 中"回发或回调参数无效"的解决方案

    这两天开发的时候碰到一个问题:在用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,不知道是否有同样的问题,想来是应该没有的。
posted @ 2007-11-29 17:24  badwood  阅读(657)  评论(0编辑  收藏  举报
Badwood's Blog