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

当前回答

在本例中,将id添加到网格的RowDataBound中的按钮。它会解决你的问题。

其他回答

问题是ASP。NET不会知道这个额外的或已删除的列表项。 你有很多选择(如下所示):

禁用eventvalidation(这是个坏主意,因为你损失了一点安全性,而代价却很小)。 使用ASP。NET Ajax UpdatePanel。(如果你添加或删除列表框,将列表框放在更新面板中并触发更新。通过这种方式,viewstate和相关字段得到更新,eventvalidation将通过。) 忘记客户端,使用经典的回发并添加或删除listitems服务器端。

正如Nick B说的,这对我很有用在某些情况下你必须删除换行符。看一下代码:

错误的方法:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">
            Item 1</asp:ListItem>
    <asp:ListItem>
            Item 2</asp:ListItem>
    <asp:ListItem>
            Item 3</asp:ListItem>
</asp:DropDownList>

-对道:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">Item 1</asp:ListItem>
    <asp:ListItem>Item 2</asp:ListItem>
    <asp:ListItem>Item 3</asp:ListItem>
</asp:DropDownList>

我只在IE10+中遇到过

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

我有一个类似的问题,但我没有使用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);

希望这能帮助到一些人。

我有同样的问题与Repeater,因为我有一个网页与一个网站的Repeater控件,已启用EnableEventValidation开关。这并不好。我得到无效的回发相关异常。

对我来说有用的是为Repeater设置EnableViewState="false"。它的优点是使用起来更简单,就像关闭网站或网页的事件验证一样简单,但是范围比关闭事件验证要小得多。