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

当前回答

这就是我得到它的原因:

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

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

排序! !

其他回答

Ajax UpdatePanel可以做到这一点,我认为这是最简单的方法,忽略Ajax回发开销。

最好的选择是使用隐藏字段,不禁用事件验证,也改变每个列表框,下拉列表选择与runat服务器属性

如果你把UseSubmitBehavior="True"改成UseSubmitBehavior="False",你的问题就解决了

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />

以上这些方法对我都没用。经过更多的挖掘,我意识到我忽略了2个表单应用在页面上,这是导致问题的原因。

<body>
<form id="form1" runat="server">
<div>
        <form action="#" method="post" class="form" role="form">
        <div>
        ...
        <asp:Button ID="submitButton" runat="server"
        </div>
</div>
</body>

注意,最近ASP。NET已经开始考虑iframes在一个表单标签中包含一个表单标签在iframe文档本身是一个嵌套框架。为了避免这个错误,我不得不将iframe移出form标签。

我有一个类似的问题,但我没有使用ASP。Net 1.1也没有通过javascript更新控件。 我的问题只发生在Firefox而不是IE(!)。

我在PreRender事件的下拉列表中添加了如下选项:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

我的“HF”(隐藏字段)有换行符分隔的选项,如下所示:

HF.value = "option 1\n\roption 2\n\roption 3";

问题是HTML页面在代表下拉菜单的“选择”选项上出现了问题(我的意思是有换行符)。

所以我解决了我的问题加了一行

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

希望这能帮助到一些人。