【转】DataList控件里添加Button,运行点击出现“回发或回调参数无效”的解决办法...

DataList控件里添加Button,运行点击出现“回发或回调参数无效”的解决办法
2009-04-23 21:21

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

用LinkButton就不会出现这样的情况,大多都是把EnableEventValidation="false",但设置成false会让Button无反应,而且还没有局部的EventValidation,所以把EnableEventValidation设置成false不是首选解决办法。

异常的出现都是“出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件”这句话所描述的原因,所以我觉得,只要给这些“不明”的Button给予“身份”,大概就能解决这个问题了

举个例子吧,有如下一个DataList

< asp:DataList ID = " DataList1 " runat = " server " OnItemDataBound = " DataList1_ItemDataBound "
                 OnItemCommand
= " DataList1_ItemCommand " >
                
< ItemTemplate >
                    
< asp:Button ID = " Button1 " runat = " server " Text = ' <%# Eval("CompanyName") %> ' OnClick = " Button1_Click " CommandName = " test " />
                
</ ItemTemplate >
</ asp:DataList >

通过在Datalist对数据进行DataBind的时期对各Item的Button控件进行PostBackOptions的设置(就是给予这些Button“身份”),例子如下:

protected void DataList1_ItemDataBound( object sender, DataListItemEventArgs e)
     {
        
if (e.Item.ItemType == ListItemType.Item ||
              e.Item.ItemType
== ListItemType.AlternatingItem)
         {
             PostBackOptions pbo
= new PostBackOptions(e.Item.FindControl( " Button1 " ));
             pbo.ActionUrl
= " dl.aspx?page= " + e.Item.ItemIndex.ToString();   // 回发的目标 URL
             pbo.PerformValidation = true ;   // 指示在回发事件发生之前是否需要在客户端进行验证
             pbo.AutoPostBack = false ;
             pbo.RequiresJavaScriptProtocol
= true ;   // 指示是否为客户端脚本生成了 javascript: 前缀
             ((Button)e.Item.FindControl( " Button1 " )).PostBackUrl = Page.ClientScript.GetPostBackEventReference(pbo);    // 给予Button“身份”
         }
     }
用上面的方法都不影响Button的Click事件和DataList的ItemCommand事件。

转载于:https://www.cnblogs.com/cappuccino/archive/2010/04/23/1718270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值