【问题标题】:Disable Drop-down list item without removing the value from FormCollection禁用下拉列表项而不从 FormCollection 中删除值
【发布时间】: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


    【解决方案1】:

    禁用属性不要在表单提交中输入值,这就是您收到空字符串的原因。 这是您可以应用的技巧: 将所选值放在隐藏输入字段 onchnage 函数中,然后在表单提交时读取隐藏值,而不是读取禁用下拉列表的 vslue。 希望对您有所帮助。

    【讨论】:

    • 感谢您的回复,您能否发布一个如何工作的示例?
    • 对迟到的回复表示歉意。我设法听从了您的建议,尽管正如我在编辑中发布的那样,这只允许我为我的一个下拉菜单存储数据,你知道我怎样才能让它适用于我的所有重复项吗?谢谢
    • 如何使用隐藏的输入作为数组来保存多个值?每次您选择一个下拉值时,它都会被推送到隐藏输入,但当然还有一个令牌,以便稍后在服务器端从输入数组中识别。隐藏输入可能如下所示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2012-03-11
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多