我在此页面中有许多以下下拉列表,每个列表都包含可选用户列表。当在一个列表中选择用户时,我不希望在任何其他列表中选择它们。出于这个原因,我编写了一个禁用它们的脚本。
提交表单时,下拉列表中选择的每个用户的用户名应附加到表单集合中的User
值。
这可以在不禁用名称的情况下正常工作,但是当我在类描述中添加seat-select
时,名称总是在FormCollection中作为空字符串返回。
您是否知道为什么这样做或者我可以做些什么来保持名称在FormCollection中正确填充?
下拉列表:
@Html.DropDownListFor(m => m.User, Model.UserList, "Select User", new { @class = "form-control seat-select", @id = "uniqueID", @onchange = "cleanUsers(this);" })
Java脚本:
function cleanUsers(ddl) {
var val = ddl.options[ddl.selectedIndex].value;
var vOldVal = $("#" + ddl.id).attr("data-selected");
$("#" + ddl.id).attr("data-selected", val);
//Remove selected
if (val != 0) { $(".seat-select option[value='" + val + "']").attr("disabled", true); }
if (vOldVal != undefined) { $(".seat-select option[value='" + vOldVal + "']").attr("disabled", false); }
}
2016年6月6日更新: 道歉要带回旧帖子。我已经尝试了下面列出的建议,这可以返回一个选定的值。不幸的是,在我的解决方案中,我有许多相同的下拉列表,我需要跟踪哪个下拉列表的确切结果。
我在下面发布了我的新代码。当每个下拉菜单都被更改时,该字符串将被覆盖,因此当前不适合我。
新JavaScript:
function cleanRowers(ddl) {
var val = ddl.options[ddl.selectedIndex].value;
var vOldVal = $("#" + ddl.id).attr("data-selected");
$("#" + ddl.id).attr("data-selected", val);
//Remove selected
if (val != 0) {
$("#SelectedUserText").val(val);
$(".seat-select option[value='" + val + "']").attr("disabled", true);
}
if (vOldVal != undefined) { $(".seat-select option[value='" + vOldVal + "']").attr("disabled", false); }
}
隐藏值正在更新:
@Html.HiddenFor(m => m.SelectedUserText)
我正在尝试使代码尽可能可重用,因此不要为每个下拉列表设置不同的标识符,但重要的是我要跟踪信息来自哪个下拉列表。< / p>
有没有办法可以做到这一点?
答案 0 :(得分:0)
已禁用的属性不会在表单提交中输入值,这就是您收到空字符串的原因。 这是一个你可以应用的技巧: 将所选值放在隐藏的输入字段onchnage函数中,然后读取表单提交上的隐藏值,而不是读取禁用下拉列表的vslue。 希望有所帮助。