当我从客户端返回一个页面时,我得到以下错误。我有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

当前回答

在远程服务器(生产、测试、qa、登台等)上遇到这个问题后,而不是在本地开发工作站上,我发现应用程序池配置的RequestLimit不是0。

这导致应用程序池放弃并回复问题中指出的异常。

其他回答

你需要做2或3个,不要禁用事件验证。

在asp:listbox客户端添加项目有两个主要问题。

The first is that it interferes with event validation. What came back to the server is not what it sent down. The second is that even if you disable event validation, when your page gets posted back the items in the listbox will be rebuilt from the viewstate, so any changes you made on the client are lost. The reason for this is that a asp.net does not expect the contents of a listbox to be modified on the client, it only expects a selection to be made, so it discards any changes you might have made.

最好的选择是像推荐的那样使用更新面板。另一个选择,如果你真的需要这样做的客户端,是使用普通的<select>而不是<asp:ListBox>,并保持你的项目列表在一个隐藏字段。当页面在客户端上呈现时,您可以从文本字段内容的分割中填充它。

然后,当您准备发布它时,您从修改后的<select>中重新填充隐藏字段的内容。然后,当然,您必须在服务器上再次分割它,并对您的项目做一些事情,因为您的选择现在是空的,因为它回到了服务器上。

总而言之,这是一个非常麻烦的解决方案,我并不推荐,但如果您确实需要对listBox进行客户端修改,它确实可以工作。但是,我真的建议您在走这条路之前查看一下updatePanel。

我用的是数据列表,我的按钮也出现了同样的错误。我只是使用IsPostBack检查和填充我的控件,问题就解决了!太棒了! !

对我有用的是将以下代码从page_load移动到page_prerender:

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}

如果您通过客户端脚本填写下拉列表,则在将表单提交回服务器之前清除列表;然后ASP。NET将不会抱怨,安全性将仍然存在。

为了从DDL中获得选择的数据,您可以将“OnChange”事件附加到DDL以收集隐藏输入或文本框中的值,并使用Style="display: none;"

此错误将在没有回发的情况下显示

添加代码:

If(!IsPostBack){

 //do something

}