读书人

应用repeater开发出现 回发或回调参数

发布时间: 2012-12-17 09:31:40 作者: rapoo

使用repeater开发出现 回发或回调参数无效 出错
使用repeater模板开发时 添加一个按钮 点击按钮Button实现 删除功能时就出现 下问题:
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证
在 repeater 外面点击一个按钮 不会出现此问题 。这是什么原因啊?
各位高手帮帮小弟吧。



[最优解释]
<%@ Page EnableEventValidation="true" %>
把这个改为false吧
应该是repeater里面的数据被拦截了
[其他解释]

引用:
<%@ Page EnableEventValidation="true" %>
把这个改为false吧
应该是repeater里面的数据被拦截了


很多时候都是 验证机制在作祟..
[其他解释]
- - 都已经有提示了
[其他解释]
引用:
<%@ Page EnableEventValidation="true" %>
把这个改为false吧
应该是repeater里面的数据被拦截了

回调无效的话一般就是按钮里面的那个是否验证设置为真,或者页面的头条的那里设置是否验证。
[其他解释]
不知道你怎么设置这个Button,看起来你写了不少代码。我一向认为最好的软件设计就是少写代码。但是如果你喜欢写代码,提问时就把代码贴出来吧,不然没法才,因为自己写的代码总是不如使用现成的控件的写法正规。
[其他解释]
其他设置问题,EnableEventValidation="false"
protected void Button1_Click(object sender, EventArgs e)
{
RepeaterItem item =(RepeaterItem) ((Button)sender).Parent;

}

[其他解释]
通常,这不是你的aspx设计代码造成的,而是脚本代码javascript修改了你的repeater中数据行的postback相关的参数。asp.net无法区分你的代码和流氓软件的区别,它们都是去在浏览器端修改postback语句的参数,因此就会触发enableEventValidation验证错误。所以仅看到你正规的设计代码,是解决不了问题的。

不过我建议即使如此不要放松enableEventValidation限制(不要把它设置为false),要找出真正的问题,正常地编写程序。
[其他解释]
再检查一下你的代码还有没有什么地方操纵了 bt_delete,特别是有没有javascript干这个事!
[其他解释]
button 按钮在repeater外边 点击的时候 就不会出现此问题 为什么啊?
在repeater里面时就出现问题,这是什么原因啊

[其他解释]
部分代码:
<asp:Panel ID="Panel2" runat="server">
<div class="repeter"><asp:Repeater ID="RepMesage" runat="server"
onitemdatabound="RepMesage_ItemDataBound">
<HeaderTemplate>
<ul >
<li style=" height:30px;"><div class="titlediv">发件人</div></li>
<li style=" width:220px; height:30px;"><div class="titlediv">内容</div></li>


<li style=" height:30px;"><div class="titlediv">时间</div></li>
<li style=" height:30px;"><div class="titlediv">操作</div></li>
</HeaderTemplate>
<ItemTemplate>
<li><div class="titlediv"> <%#Eval("InfoFormUserName")%> </div></li>
<li style=" width:220px; "><div style=" width:220px;">
<asp:TextBox runat="server" Text=<%#Eval("content") %> BorderStyle="None" Width="219px" TextMode="MultiLine" ReadOnly="true" Height="50px" >
</asp:TextBox></div></li>
<li ><div class="titlediv"><asp:TextBox runat="server" Text=<%#Eval("createdate")%> Width="110px" BorderStyle="None"></asp:TextBox></div></li>
<li ><div style=" margin-top:15px; text-align:center">
<asp:HyperLink ID="hplink" Font-Underline="false" runat="server" NavigateUrl=<%#"~/UserMessages.aspx?userid=" + Eval("infoformusername") + "" %>>回复</asp:HyperLink>
<asp:CheckBox ID="mycheck" runat="server">
</asp:CheckBox><asp:Button ID="bt_delete" runat="server" OnCommand="BtnDel_Click" CommandName=<%#Eval("id") %> CommandArgument="delete" Text="删除" /></div>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</div>
</asp:Panel>
[其他解释]
thanks 但是不太明白
[其他解释]
这个检验机制很容一理解。我给你举一个例子,假设你有一个数据绑定控件,它完全可能动态地出现以下CommandName:分页、选中行、删除行,假设你根本没有在页面上输出“sp1234”信息行,而仅仅是删除“xp5678”信息行,但是流氓软件通过javascript把html dom 元素中字符串xp5678修改为sp1234然后就提交了,是不是服务器就会删除错误的信息呢?

asp.net的这个 enableEventValidation 机制就是保证这种流氓行径无法执行。所以我建议你不要轻易把它设置为false。
[其他解释]

引用:

这个检验机制很容一理解。我给你举一个例子,假设你有一个数据绑定控件,它完全可能动态地出现以下CommandName:分页、选中行、删除行,假设你根本没有在页面上输出“sp1234”信息行,而仅仅是删除“xp5678”信息行,但是流氓软件通过javascript把html dom 元素中字符串xp5678修改为sp1234然后就提交了,是不是服务器就会删除错误的信息呢?

asp.net的这个……

学习
[其他解释]
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TableTableAdapter tta = new TableTableAdapter();
Repeater1.DataSource = tta.GetData();
Repeater1.DataBind();
}
}

如上代码,若不添加IsPostBack,则会在页面没次刷新时都生成一遍,造成重复绑定Repeater控件,以致 事件验证出错,提示如上错误。

读书人网 >asp.net

热点推荐