当我从客户端返回一个页面时,我得到以下错误。我有JavaScript代码,修改asp:ListBox在客户端。

我们如何解决这个问题?

错误详情如下:

Server Error in '/XXX' Application.

--------------------------------------------------------------------------------
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.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: 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.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[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.]
   System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
   System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
   System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
   System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433

当前回答

供参考,我有同样的错误消息的问题,这是我在同一页上有2个表单标签。一个在母版页,一个在页面本身。一旦我删除了第二个形式标签对,问题就消失了。

其他回答

如果您预先知道可以填充的数据,那么可以使用ClientScriptManager来解决这个问题。当我在以前的用户选择上使用javascript动态填充下拉框时,我遇到了这个问题。

下面是一些覆盖呈现方法(在VB和c#中)并为下拉列表ddCar声明潜在值的示例代码。

在VB:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

或者c#的轻微变化可以是:

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

对于新手:这应该在文件(.vb或.cs)后面的代码中,或者如果在aspx文件中使用,您可以在<script>标记中进行包装。

当我在ItemDataBound上添加id时,它没有给我错误,但它没有给我命令名。它返回命令名为空。然后我添加了命令名以及ItemDataBound。然后它解决了同样的问题。谢谢Nilesh,好建议。它起作用了:)

对我们来说,问题只在生产环境中随机发生。RegisterForEventValidation没有为我们做任何事情。

最后,我们发现在asp.net应用程序运行的web场中,两台IIS服务器安装了不同的。net版本。所以看起来他们有不同的规则加密asp.net验证散列。更新它们解决了大部分问题。

另外,我们在web中配置了machineKey(compatibilityMode)(在两个服务器中相同),httpRuntime(targetFramework), ValidationSettings:UnobtrusiveValidationMode, pages(renderAllHiddenFieldsAtTopOfForm)。配置两个服务器。

我们使用该站点生成密钥https://www.allkeysgenerator.com/Random/ASP-Net-MachineKey-Generator.aspx

我们花了很多时间来解决这个问题,我希望这对大家有所帮助。

<appSettings>
   <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
...
</appSettings>
<system.web>
   <machineKey compatibilityMode="Framework45" decryptionKey="somekey" validationKey="otherkey" validation="SHA1" decryption="AES />
   <pages [...] controlRenderingCompatibilityVersion="4.0" enableEventValidation="true" renderAllHiddenFieldsAtTopOfForm="true" />
   <httpRuntime [...] requestValidationMode="2.0" targetFramework="4.5" />
...
</system.web>

我的问题解决时取消事件结束时网格事件在服务器端。

protected void grdEducation_RowEditing(object sender, GridViewEditEventArgs e)
{
  // do your processing ...

  // at end<br />
  e.Cancel = true;
}

这就是我得到它的原因:

我有一个ASP:ListBox。最初它是隐藏的。在客户端,我将通过AJAX填充它的选项。用户选择了一个选项。然后,当单击Submit按钮时,服务器会对ListBox感到奇怪,因为它不记得它有任何选项。

因此,我所做的是确保在将表单提交回服务器之前清除所有列表选项。这样服务器就不会抱怨,因为列表到客户端时是空的,返回时也是空的。

排序! !