回发或回调参数无效

来源:互联网 发布:mac装双系统分区 编辑:程序博客网 时间:2024/06/10 06:24

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

在网上找了两天资料都没有结果
剑气潇潇   的文章中看到原因是:
下边引用自:剑气潇潇  的文章
http://www.cnblogs.com/asp600/archive/2006/11/04/550216.aspx

目前为止遇到的出现情况有两种:
一是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。
二是在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。


后来我自己发现,问题还不是出在那儿.
原因是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字的就行了.
网上还有一种解决办法:把 EnableEventValidation 属性设置为false;但是这样只是没有警告框而已.数据仍然无法传递给服务器,导致SelectedIndex 值一直为零.

最好在web.config中添加如下语句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>
结果搞定,现在贴到这里希望对大家能够有所帮助.

看来ajax.net对中文支持有限啊,还是因为要在Web.Config设置一下编码??????

 

 

问:

我在repeater控件里用了图片按钮,通过图片按扭的 OnCommand 和
CommandName来调用代码隐藏页面的删除记录的过程,执行时出现错误,但用HyperLink则不会出现错误提示.
错误提示如下:
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page
EnableEventValidation="true" %>
启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用
ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

我按照错误提示,在页面设置了<%@ Page EnableEventValidation="false" %>后就没有错误提示了.
但这样是不是不安全?我如果不设置<%@ Page EnableEventValidation="false"
%>,怎么样才能如提示里说的那样,使回发或回调参数有效呢???

答:

EnableEventValidation属性指示是否应执行事件验证,此属性在.NET Framework 2.0版中是新增的。
基本控件将检查此属性,以确定是否应对事件进行验证。派生的控件不会继承此基本控件属性,因此默认情况下不进行事件验证。通过向派生的控件本身添加 EnableEventValidation 属性并将其设置为 true,用户仍可以指示 ASP.NET 对派生的控件执行事件验证。

注意:
此事件验证机制可消除未经授权的回发请求和回调带来的风险。它指示 ASP.NET 仅对会在回发请求或回调期间在控件上引发的特定事件进行验证。通过此模型,控件可在呈现期间注册其事件,然后在回发或回调期间验证这些事件。默认情况下,现在 ASP.NET 中的所有事件驱动控件均使用此功能:
如果没有定义EnableEventValidation属性,则只有在显式调用ValidateEvent 时,自定义控件才会参与事件验证。如果处理了事件注册和验证,然后调用ValidateEvent,则不需要在控件上定义此属性。
如果定义了此属性,但没有注册事件验证,则会出现运行时异常“无效的回发或回调数”。
关于PagesSection.EnableEventValidation 属性的详细解释,请参考下述文章:
http://msdn2.microsoft.com/zh-cn/library/system.web.configuration.pagessection.enableeventvalidation.aspx

如果设置<pages enableEventValidation="true"/> 或在页面中使用<%@ Page EnableEventValidation="true" %>启用了事件验证,您可以考虑使用ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证,具体的请参考下述代码:
protected override void Render(System.Web.UI.HtmlTextWriter
writer)
{
base.Render(writer);
Page.ClientScript.RegisterForEventValidation(Repeater.ID);
}

关于ClientScriptManager.RegisterForEventValidation 方法详细信息,请参考下述文档:
http://msdn2.microsoft.com/zh-cn/library/ms223397(VS.80).aspx

原创粉丝点击