当前位置: 首页 > news >正文

Invalid postback or callback argument

ASP.net 添加了"event validation"的功能, ASP.NET会检查 POST方法中的所带的参数,如果
认为不合法,就会抛出异常,信息如下

    Invalid 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 validation.
   
这个设计的目的是为了防止恶意用户利用post 方法发送一些恶意数据.但是有时一些常见的
case也会出错,比如使用客户端脚本,根据页面上的其他控件的内容来改变一个dropdown list的内容,最常见的case
就是省市县3级联动菜单.又比如在页面上添加一个dropdown list,然后给它添加3个item,再使用客户端脚本在
dropdown list中添加一个item,如果dropdown list的AutoPostBack="True",每次选择list item都会引起postback,
如果所选的item为dropdown list本来就有的,一切正常.如果所选的item是通过客户端脚本添加的,就会出现异常.

在asp.net render DropDownList 时,会遍历DropDownList的item,并记录所有可能的postback的值,其算法为
hash(DropDownList’s UniqueID XOR hash(ListItem’s Value property)),计算的结果会被保存在page中,

<input type="hidden"
       name="__EVENTVALIDATION"
       id="__EVENTVALIDATION"
       value="/wEWBQKGg9abDQKd9sHMBgKc9s…….."
/>
这个过程发生在control的Render()方法中
当页面postback时,ASP.NET会根据这个隐藏值检查postback values,如果找不到对应信息,就会报错

结局方案
1. 禁止这个功能, 但同时会失去一些安全保障:
//—-通过web.config
<system.web>
   <pages enableEventValidation="false"/>
</system.web>
//—-针对某个page
<%@ Page EnableEventValidation="false" … %>

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

protected override void Render(HtmlTextWriter writer)
{
   ClientScript.RegisterForEventValidation(_recipeList.UniqueID,"4");
   base.Render(writer);
}

如果我们自己写了一个control,需要使用validate events功能,就需要使用SupportsEventValidation attribute,

[SupportsEventValidation]
public class DynamicDropDownList : DropDownList
{
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
     Page.ClientScript.RegisterForEventValidation(this.UniqueID, "4");
     base.Render(writer);
}
}

目前,asp.net还不能单独禁止某个control的validate events功能.

]]> http://kedach.blog.sohu.com/43913108.html http://kedach.blog.sohu.com/43913108.html#comment fengzoo的blog Sat, 28 Apr 2007 18:56:07 +0800 心得经验。。。 http://kedach.blog.sohu.com/43913108.html 事例:从产品表中读取数据,绑定到repeater中,并将相关数据赋值给repeater中的相关控件.

 

遇到问题:数据库中存在字段:sort (int类型) 值[1商务系列";2休闲系列;3运动系列;4牛仔系列;](即读取的是数字),但是,客户要求显示时,却要现实汉字种类.

实现:在后台代码中添加一个public方法,该方法实现将相应的数字转化为汉字,方法如下:

    public string GetState(string i)
    {
        if (i == "1")
            return "商务系列";
        if (i == "2")
            return "休闲系列";
        if (i == "3")
            return "运动系列";
        if (i == "4")
            return "牛仔系列";
        else
            return "其他";
    }

然后在前台aspx中调用该方法:

<td><%# GetState(DataBinder.Eval(Container.DataItem, "sort").ToString())%> </td>

ok,功能实现!!!!

自己鼓励一下自己,呵呵!!!

]]> http://kedach.blog.sohu.com/43686197.html http://kedach.blog.sohu.com/43686197.html#comment fengzoo的blog Thu, 26 Apr 2007 23:19:27 +0800 .NET技术及相关 http://kedach.blog.sohu.com/43686197.html 1 先在Repeater中写一个OnItemCommand
   <asp:Repeater ID="Repeater" runat="server" OnItemCommand="op_ItemCommand" >
2 再在删除那个按钮写一个CommandName
<asp:LinkButton runat="server" ID="zssc" ToolTip="删除发布页面" CommandName ="Del" OnClientClick="return confirm('确定要删除新闻的发布页面?')"></asp:LinkButton>
3 CS代码中写下面的东东

 

只用把ID绑定在一个隐藏的LABLE上面就可以了,或者你就绑定在一个Lable上面,显示给用户看到他的ID,然后在第3步“//操作代码”那个地方,你写上这么一句:

Lable lb_Repeater_ID = (Label)e.Item.FindControl("lb_ID");

解释:lb_Repeater_ID是让你在下面删除这个记录的时候用的,而后面那个lb_ID是前面页面上,你所点击的那行的控件的名字,那么你要删除的时候,就可以使用lb_Repeater_ID了,见下面:
SqlCommand cmd = new SqlCommand("delete from Table1 where id = '"+ lb_Repeater_ID.Text + "'", conn);


protected void op_ItemCommand(object sender, RepeaterCommandEventArgs e)
    {      
        switch (e.CommandName)
        {           
            case "Del":
                //操作的代码!
                break;
         }
    }

]]> http://kedach.blog.sohu.com/43685992.html http://kedach.blog.sohu.com/43685992.html#comment fengzoo的blog Tue, 1 May 2007 19:58:28 +0800 .NET技术及相关 http://kedach.blog.sohu.com/43685992.html 我们在用vs2005做数据绑定的时候运行出来的

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


有人说改成 pages enableEventValidation="false",但这样我们绑定的控件就用不了了。
我在网上查了一下,只要我们把绑定代码写在IsPostBack里就好了。
因为如果不家判断,我们在点击绑定控件时数据绑定会重做,这样我们原来绑定的东西就不存在了,在回调时就会出错.

相关文章:

  • 网页视频播放器代码大全
  • String or binary data would be truncated 异常解决办法
  • C# 将本地文件远程拷贝到其他电脑
  • HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
  • AjaxPro ‘未定义’解决方案
  • FlashFXP v3.5.4注册码+FlashFXP v3.6.0注册码+FlashFXP v3.7.2.build.1266...
  • Google Maps API一例错误处理 SCRIPT5007: 无法获取属性“firstChild”的值: 对象为 null 或未定义 main.js
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • 解决Requset.Write()弹出提示框变形问题
  • Google Maps API openInfoWindowHtml a is undefined
  • C#日期格式化
  • 用jquery判断一个对象是否存在不能用
  • 男人职场不成熟的十大标志
  • Asp.net(C#)-显示所有缓存 清除所有缓存
  • 2017届校招提前批面试回顾
  • django开发-定时任务的使用
  • express.js的介绍及使用
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • MQ框架的比较
  • passportjs 源码分析
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 区块链共识机制优缺点对比都是什么
  • 如何设计一个比特币钱包服务
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 2017年360最后一道编程题
  • Java数据解析之JSON
  • 阿里云服务器购买完整流程
  • 带你开发类似Pokemon Go的AR游戏
  • 整理一些计算机基础知识!
  • #pragma 指令
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (42)STM32——LCD显示屏实验笔记
  • (6)设计一个TimeMap
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (剑指Offer)面试题34:丑数
  • (论文阅读11/100)Fast R-CNN
  • (三)终结任务
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .htaccess 强制https 单独排除某个目录
  • .Mobi域名介绍
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件