我目前正在使用转发器来制作按钮列表。每个按钮都有一个单击事件,它将从列表中删除转发器中的该项。但是,当我单击任何按钮时,我收到错误System.ArgumentException: Invalid postback or callback argument
。我在看this answer。我不想禁用EnableEventValidation
(这样做会带来安全风险)。对此有更好的解决方案吗?
错误:
2014-08-13 12:52:34.305 7276 ASP.support_createcustomer_autocamerainstall_aspx Error Exception for url=/AdminDotNet/Support/CreateCustomer/AutoCameraInstall.aspx
System.ArgumentException: 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.
at System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument)
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
HTML:
<asp:UpdatePanel ID="panelCameraGroup" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="locAddCameraButton" />
</Triggers>
<ContentTemplate>
<div id="divMainContent" runat="server">
<asp:Repeater ID="repeaterCameras" runat="server">
<ItemTemplate>
<div>
<asp:Button ID="locRemoveCameraButton" runat="server"
OnClientClick="return clickRemoveCamera(this)" OnClick="RemoveCamera"
Text="Remove" meta:resourcekey="btnRemoveCamera"
data-camera-position='<%# Eval("Position") %>'></asp:Button>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</ContentTemplate>
</asp:UpdatePanel>
clickRemoveCamera
只是一个空的JavaScript方法。 locAddCameraButton
是用于添加到转发器列表的单个按钮。我已尝试删除AsyncPostBackTrigger
并删除UpdateMode="Conditional"
。仍然没有奏效。
C#:
protected void RemoveCamera(object sender, EventArgs e)
{
if (sender == null)
return;
Button removeCameraButton = (Button)sender;
string buttonClickPos = removeCameraButton.Attributes["data-camera-position"];
System.Diagnostics.Debug.WriteLine("buttonClickPos = " + buttonClickPos);
foreach (RepeaterCamera rc in repeaterCamerasList)
{
if(string.Equals(rc.Position.ToString(), buttonClickPos)){
System.Diagnostics.Debug.WriteLine("Found camera in repeater");
}
}
}
答案 0 :(得分:0)
我明白了。在我Page_Load
我更改了转发器。我应该只在!IsPostBack
期间这样做(我不是)。所以我补充说它有效。