在使用javascript向下拉列表添加项目并运行服务器端代码后,无效的回发或回调参数

Invalid postback or callback argument after adding items to DropDownList using javascript and running server-side code?

本文关键字:无效 参数 回调 代码 服务器端 javascript 下拉列表 添加 运行 项目      更新时间:2023-09-26

我们的asp.net webform有两个DropDownLists (DdlStatusDdlPlanStatus)和一个带有服务器端代码的"Search"按钮。

最初,页面将以这种方式工作:如果ListItem"计划"在DdlStatus中被选中(这总是可见的),那么DdlPlanStatus将被显示(使用javascript),用户将从第二个DropDownList中选择并进行搜索。如果在DdlStatus中选择ListItem"Complete",则隐藏DdlPlanStatus并进行搜索。

新的变化是,第二个下拉框(DdlPlanStatus)将与两个ListItems可见。所以本质上,如果ListItem "Complete"在DdlStatus中被选中,DdlPlanStatus将有两个ListItems可供选择。

这就是我的javascript代码:
function HideDropDown() {
    var ddl = document.getElementById("<%=DdlStatus.ClientID%>");
    var SelectedValue = ddl.options[ddl.selectedIndex].value;
    var ddlParms = document.getElementById("<%=DdlPlanStatus.ClientID%>");
    if ((SelectedValue) == "Complete") {
        // ddlParms.style.display = "none";  //This was before, where I hid dropdown
        document.getElementById("<%=DdlPlanStatus.ClientID%>").options.length = 0;
        var opt = document.createElement("option");
        opt.text = "Complete";
        opt.value = "Complete";
        document.getElementById("<%=DdlPlanStatus.ClientID%>").options.add(opt);

        var opt2 = document.createElement("option");
        opt2.text = "Missing";
        opt2.value = "Missing";
        document.getElementById("<%=DdlPlanStatus.ClientID%>").options.add(opt2);
    }
    else {
        ddlParms.style.display = "block"; //display dropdown
    }
}

当"完成"在第一个下拉菜单中被选中时,我清除了第二个下拉菜单的内容并添加了两个项目,而不是仅仅隐藏它。

问题是,当我运行搜索,我得到错误。我几乎可以肯定,这是因为我添加项目使用javascript:

Invalid postback or callback argument.  Event validation is enabled using
<pages enableEventValidation="true"/> in configuration or 
<%@ Page EnableEventValidation="true" %> in a page.

我是否需要以另一种方式添加那些ListItems ?

谢谢。

此错误是由于您在客户端更改了DdlPlanStatus项而导致的。如果DdlPlanStatus总是有两个选项("Complete"answers"Missing"),那么你可以在aspx文件中做,而不是在客户端添加它们。有关EventValidation的更多信息,请参阅

http://blogs.msdn.com/b/amitsh/archive/2007/07/31/why-i-get-invalid-postback-or-callback-argument-errors.aspx

当你启用eventvalidation,你的下拉菜单将注册他们的事件的所有值,当他们被渲染,即当你的页面得到在服务器端创建。在回发/回调时,传递的参数(下拉列表的值)将根据注册的事件进行验证。因此,当您更改客户端(javascript)的下拉菜单值时,注册值与回发/回调传递的实际值不匹配,并且会抛出异常。为了避免这种情况,您必须关闭eventValidation或使用RegisterForEventValidation函数(这里有更多信息)。或者你可以在服务器端修改你的下拉列表元素

你可以在这里阅读更多关于事件验证的信息

EDIT:如果下拉值是敏感数据并且可能导致安全问题,则不建议关闭事件验证。相反,最好注册所有可接受的值。