在使用javascript向下拉列表添加项目并运行服务器端代码后,无效的回发或回调参数
本文关键字:无效 参数 回调 代码 服务器端 javascript 下拉列表 添加 运行 项目 | 更新日期: 2023-09-27 18:16:22
我们的asp.net
webform有两个DropDownLists
(DdlStatus
和DdlPlanStatus
)和一个带有服务器端代码的"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:如果下拉值是敏感数据并且可能导致安全问题,则不建议关闭事件验证。相反,最好注册所有可接受的值。