【发布时间】:2016-09-16 22:40:15
【问题描述】:
我在此页面中有许多以下下拉列表,每个下拉列表都有一个可选用户列表。在一个列表中选择用户时,我不希望在任何其他列表中选择他们。为此,我编写了一个脚本来禁用它们。
提交表单时,下拉列表中选择的每个用户的用户名应附加到表单集合中的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)
我正在尝试使代码尽可能地可重用,所以我真的不希望每个下拉菜单都有不同的标识符,但重要的是我要跟踪信息来自哪个下拉菜单。
有没有办法做到这一点?
【问题讨论】:
标签: javascript c# razor asp.net-mvc-5