“回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。”的替代解决方法

再次感到俺对ASP.NET处理机制了解的贫乏.

ASP.NET有服务器端控件和客户端控件之分,服务器端控件是ASP.NET自己实现的一套控件,(或者可以说是增强版的HTML控件)客户端控件是原始的HTML控件. 俺今天就在这上面吃了苦头.

俺在网页编码中使用ASP:DropDownList控件,后台进行数据填充,前端显示任意的数据.

asp:DropDownList runat="server" ID="dd_Field">
                                            </asp:DropDownList>
s

但俺在前端时采用了AJAX的方式向数据库添加了新内容,然后将新数据填充到了页面中的 dd_Field中.

这里需要特别注意的是: 此时页面无回发. 悲摧的问题就在这时出现了!

一个华丽的提示:

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

折腾了一天,最后搞明白了几个问题.

1, EnableEventValidation 这个指令不要用,因为会搞出许多其他的问题.(什么问题俺也不懂)

2, ASP.NET对每一个服务器端控件生成客户端的处理脚本.自动回发的实现也是基于此来做的.

3, DropDownList在后台填充数据后,在页面中就不能对它进行修改或增加操作了.不然就会出现上面的问题.

俺的解决方法如下:

1, 换ASP:DropDownList为select.(select 加 runat=”server”标记)

2, 增加一个ASP:HiddenField控件

3, 在客户端对select新增内容后,将内容写入到隐藏域中

4, 后台在取和判断时是对 隐藏域 进行的.不再涉及 select

5, 客户端邦定 select 的 onchange 事件. 服务器端邦定 select 的 onserverchange 事件.

在 onchange 中将选择的 项写入到一个隐藏域中,然后提交表单.(实现DropDownList的 SelectIndexChange 功能)

 

看起来比较折腾.  俺的理解和写作能力实在太烂. 求明人指教.

posted on 2011-03-24 18:49  sunshaozong  阅读(565)  评论(0编辑  收藏  举报