您的位置:首页 > 编程语言 > ASP

ajax和asp.net的配置文件(GB3212编码与UTF-8的冲突)(转)

2010-12-07 19:57 405 查看
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/>

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/>

可能出现的问题:
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
英文描述
id postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for valida

可行的解决方法有:

1、在页面的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 中添加 EnableEventValidation="false" 就可以了。(首先考虑的)

2、通过web.config
<system.web>
<pages enableEventValidation="false"/>

3、是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。

4、如果页面含有 DropDownList 或 ListBox这样的控件,可能以下原因造成:

4.1 在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。
4.2 原因是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字的就行了.最好在web.config中添加如下语句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>因为 POSTBACK 如果不采用 UTF-8 编码, JAVASCRIPT 会认为有问题。
只改 requestEncoding="utf-8" 就可以了,responseEncoding="utf-8" 不用

5.Register For Event Validation
其原理就是让asp.net记录这个postback value.
RegisterForEventValidation必须在render时调用.

因机器系统配置环境不同,出现错误解决方法不尽相同

2.这几天运到了一个很棘手的问题!我目前开发的一网站采用的是gb3212编码的,现在已经开发得差不多了!因为页面刷新太过于严重,所以把后台所有的dropdownlist做成为无刷新连动的效果.我用的是.NET AJAX extensions来实现其页面无刷新连动效果!刚刚开始做的时候,问题就出现了.做成这一种效果的页面一运行老是出现如下的错误信息:

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

在网上找了很多资料,最后才知道原来是编码搞的贵,ajax在数据传输的时候采用的是utf-8编码格式!不支持GB3212编码,所以每次回传的数据来是有问题!于是我把WEB配置文件改成为"<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN"/>",回传的问题是解决了,页面是不会出现什么错误!但又有新问题出现了,因为之前采用的是GB3212编码,现在换成另一种编码格式,造成整个前台页面的架构混乱!

真的是郁闷死人了!解决了一个问题又出现新的问题,没有办法下只好把WEB配置文件恢复成为<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN"/>.

继续寻找新的解决方法!经过几三天的努力,在网络上找了到一篇文章,通过他的启示,最终才解决了这个问题.我的解决方法还是更改WEB配置文件,改变成为:<globalization fileEncoding="gb2312" requestEncoding="utf-8" responseEncoding="gb2312" culture="zh-CN"/>

通过这样更改,既不会让前台页面的效果,也解决了之前出现的问题!问题虽然是解决了,但我不是很清楚具体的原因所在,也不清楚这样更改是否对现在的网站有没有影响.总之把问题解决了就好!寻找了几天的问题终于解决!

Asp.net让某一页的requestEncoding设置成gb2312或utf-8的方法

我的xpshop商城系统集成论坛,一定要用到utf-8格式,在web.config里面设置
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
fileEncoding="utf-8"
/>
但是腾讯财付通的即时到帐在线支付方式只支持gb2312格式传送数据,这就需要单独给支付页面设置gb2312编码格式
方法是:
在webconfig文件configuration元素下配置以下字节,path 可以目录路径,也可以单独指向某个文件..
<location path="Store/Pay.aspx">
<system.web>
<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN"/>
</system.web>
</location>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: