我试图在我的产品页面上添加“删除”按钮,但是我经常遇到以下错误:
错误:
无效的回发或回调参数。事件验证已启用
在配置中使用或 页面中的页面EnableEventValidation =“ true”%>。为了安全
目的,此功能可验证回传或回调的参数
事件源自最初呈现的服务器控件
他们。如果数据有效且预期,请使用
ClientScriptManager.RegisterForEventValidation方法以
注册回发或回调数据以进行验证。
堆栈跟踪:
[ArgumentException:无效的回发或回调参数。事件
使用中启用验证
配置或页面中的。
为了安全起见,此功能会验证
回发或回调事件源自服务器控件,该控件
最初渲染它们。如果数据有效且预期,请使用
ClientScriptManager.RegisterForEventValidation方法以
注册回发或回调数据以进行验证。]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId,
字符串参数)+8730646
System.Web.UI.Control.ValidateEvent(String uniqueID,String
eventArgument)+113
System.Web.UI.WebControls.Button.RaisePostBackEvent(String
eventArgument)+35
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl,String eventArgument)+13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
+36 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)
+5563
我尝试过的
在整个研究过程中,我了解到可以使用enableEventValidation="false"
和validateRequest="false"
,但由于安全原因,不建议使用。
我试图将两者都设置为False,它解决了这个问题(我没有插入DELETE查询),但是我为关闭一个安全性设置而感到不舒服,只是为了摆脱一个错误。
我的中继器位于Page_Load内部,并且由于我使用的是母版页,因此中继器也是一种形式。
Aspx:
<asp:Repeater runat="server" ID="RepProductMenu" OnItemCommand="RepProducts_ItemCommand">
<ItemTemplate>
[Lots of stuff]......
<asp:Button ID="BtnDelete" runat="server" Text="Delete" CommandName="Delete" CommandArguement='<%# Eval("ID") %>' /
</ItemTemplate>
</asp:Repeater>
Aspx.cs:
protected void RepProducts_ItemCommand(Object Sender, RepeaterCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
int ID = Int32.Parse(e.CommandArgument.ToString());
// Add Delete Query
Response.Write("COMMAND");
}
}
任何建议和想法,我们感激不尽。
最佳答案
避免将Delete
用作CommandName
,因为我认为这是保留的。
此外,您的Button
控件中还有一个错字。 CommandArguement
应该是CommandArgument
如果您的中继器绑定在Page_Load
而不是if !(page.IsPostBack)
内,则单击Delete
按钮时它将反弹。这可能会导致问题,因为中继器将在运行ItemCommand
之前反弹。这将使其无效。
尝试更改您的代码,以使if !(page.IsPostBack)
包裹在绑定中。