我有一个包含一些项目的转发器,其中有一个DropDownList和一个Button。
此处的目标是将DDL中的项目与选定的转发器行相关联。
ASPX代码:
<asp:Repeater ID="sharedPlansList" runat="server"
onitemdatabound="sharedPlansList_ItemDataBound"
onitemcommand="sharedPlansList_ItemCommand">
<ItemTemplate>
<div>
<h1>· <%# Eval("ProductName") %></h1>
<div>
Associer le domaine :
<asp:DropDownList runat="server" ID="domainList" />
<asp:Button ID="associateDomaine" Text="Associer" runat="server"
CommandArgument='<%# Container.DataItem %>' />
</div>
<div>
Domaines :
<asp:BulletedList runat="server" ID="sharedPlanDomains" />
</div>
</div>
</ItemTemplate>
</asp:Repeater>
问题:
当我单击按钮时,我每次都有无效的回发或回调异常(无效的回发或回调参数。使用配置或&lt;%@ Page EnableEventValidation =“true”%&gt;在页面中启用事件验证。出于安全考虑,此功能验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且需要,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。 )。但一切看起来都很标准,没有任何异国情调。我也没有通过javascript添加任何内容或控件。
我已经看到了可以将<pages enableEventValidation="false" />
放在web.config
中的解决方案,但我不确定这是一个很好的解决方案,因为我想确保保留asp.net内置的安全模型。
是否存在任何解决方法?
答案 0 :(得分:0)
我不能确定没有测试你的代码(我没有时间做这一秒),但是你可以验证你分配给你的按钮的动态CommandArgument是否是罪魁祸首?如果你拿出来,错误会不断被抛出?
如果是这种情况,您可以尝试处理OnItemDataBound
处理程序中的每一行并调用
ClientScript.RegisterForEventValidation("associateDomaine", -->CommandArgHere<--);
答案 1 :(得分:0)
最好的解决方案是将DropDownList替换为您自己的DropDownList。创建DropDownList的子类,并在ASPX页面上使用该列表。我认为您的DropDownList的内容在客户端更改(可能是通过Javascript?)。