[英]Invalid postback or callback argument while adding list item in dropdownlist
[英]Listbox item shifting + Invalid postback or callback argument
我有一个列表框,其中有2个按钮可以上下移动其中的项目。 如果这些项目是预先绑定的,那么如果我将它们的位置移动并保存到数据库中就可以了,但是如果我要从文本框中添加新项目->向上或向下移动其位置->保存在我的表单中,我将收到如下所示的错误,请您指教,我不想关闭安全功能。 谢谢:
这是我在JS中上移的代码:
function moveUp() {
// get the list box
var lb = document.getElementById("<%=uilstMemTypeTier.ClientID%>");
// if there are less than 2 items ignore it
if (lb.length < 2) return false;
// if the first item is selected it means that it cannot move up anymore so ignore it
if (lb.options[0].selected) return false;
var tempOpt;
for (i = 1; i < lb.length; i++) {
if (lb.options[i].selected) {
// remove the previous option and put it in a temp var
tempOpt = new Option(lb.options[i - 1].value, lb.options[i - 1].value);
// push the current one back one
lb.options[i - 1] = new Option(lb.options[i].value, lb.options[i].value);
lb.options[i - 1].selected = true;
// push the previous one into the current space
lb.options[i] = tempOpt;
}
}
repopulateHiddenFieldDefaultsFromListBox();
repopulateHiddenFieldListItemsFromListBox();
}
function repopulateHiddenFieldDefaultsFromListBox() {
// get the list box
var lb = document.getElementById("<%=uilstMemTypeTier.ClientID%>");
// get the hidden field
var hf = document.getElementById("<%=hf_listBasedFields_defaultItems.ClientID%>");
for (i = 0; i < lb.length; i++) {
if (lb.options[i].selected) hf.value += lb.options[i].value + delim;
}
}
function repopulateHiddenFieldListItemsFromListBox() {
// get the list box
var lb = document.getElementById("<%=uilstMemTypeTier.ClientID%>");
// get the hidden field
var hf = document.getElementById("<%=uihdnlistBasedFieldsListItems.ClientID%>");
// loop thru the list box and repopulate the hf
hf.value = "";
for (i = 0; i < lb.length; i++) hf.value += lb.options[i].value + delim;
}
错误信息:
无效的回发或回调参数。 使用配置或页面中的<%@页面EnableEventValidation =“ true”%>启用事件验证。 为了安全起见,此功能验证回发或回调事件的参数源自最初呈现它们的服务器控件。 如果数据有效且预期,请使用ClientScriptManager.RegisterForEventValidation方法以注册回发或回调数据以进行验证。
这是因为提交页面时在列表框中选择了一个新项目。 当ASP.NET呈现页面时,它会记录它在ListBox中呈现的项目,并且如果选择的值不是其中之一,则在回发时会抛出该错误,因为它认为数据已被篡改。
您可以为整个页面禁用EventValidation(如错误中所述),但这通常是一种不好的做法,除非您对代码非常了解,因为它会禁用由此带来的许多保护。
不幸的是,我认为您不能只为一个控件完全禁用EventValidation。 您可以使用ClientScriptManager.RegisterForEventValidation
但这要求您告诉ASP.NET 所有可能输入的值。
解决该问题的一种方法是使用与您的状态类似的隐藏字段,但要使用所选项目。 尝试使用隐藏字段将列表框中的选定选项发送回去,并记住在回发之前清除列表框中的选择,以使ASP.NET不会抱怨无法识别的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.