如何处理,ASP.NET中回发或回调参数无效

本人采用asp.net开发一个网站,在一个页面中增加一个asp:DropDownList控件和一个asp:button按钮;在asp:button中增加一个点击事件onclick点击按钮,发现网页调用正常,绑定asp:dropdownlist控件的数据,再一次点击button按钮出现如下的错误提示:

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

解决方案:

1、根据提示在页面中增加<%@ Page EnableEventValidation="false" %> 但如此一来你的网页安全性会受到一定的影响。

2、再一次根据提示使用ClientScriptManager.RegisterForEventValidation 去解决问题,查找原因,本人在网页中使用了dropdownlist控件在控件中增加了数据,原本控件的内容是空的因此对验证没有什么影响,但是如今增加数据,Visual studio2005需要对这个增加的数据进行验证,这一点可以从网页的源码中看出来,<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"  value=“”>这个隐藏控件中的value是不一样的。这是因为Asp。net在生成客户端脚本时会去遍历Dropdownlist所有的item,这些值到时候postback到服务器中因此必须把这些item的值记录下来并放入到Page中。也就是刚才提到的那个隐藏控件中的value中。那么如何用ClientScriptManager.RegisterForEventValidation 来解决这个问题呢??

解决方案:

只要重写protected override void Render(HtmlTextWriter writer)函数,在函数中去遍历DropdownList控件的中的ITEM,吧每个item注册到客户端中就可以了。

  protected override void Render(HtmlTextWriter writer)
    {
        foreach (ListItem listitem in dropCpdw.Items)
        {

            ClientScript.RegisterForEventValidation(dropCpdw.UniqueID, listitem.Value);
        }
        base.Render(writer);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值