【问题标题】:Getting Multiple Selected Values in Html.DropDownlistFor在 Html.DropDownlistFor 中获取多个选定值
【发布时间】:2012-08-29 11:19:53
【问题描述】:
@Html.DropDownListFor(m => m.branch, CommonMethod.getBranch("",Model.branch), "--Select--", new { @multiple = "multiple" })

@Html.DropDownListFor(m => m.division, CommonMethod.getDivision(Model.branch,Model.division), "--Select--", new { @multiple = "multiple" })

我有两个 DropDownListFor 实例。我想为那些先前存储了 Model.branch 和 Model.division 值的对象设置为 true。这些是存储 id 的字符串数组

class CommonMethod
{
    public static List<SelectListItem> getDivision(string [] branchid , string [] selected)
    {
        DBEntities db = new DBEntities();
        List<SelectListItem> division = new List<SelectListItem>();
        foreach (var b in branchid)
            {
                var bid = Convert.ToByte(b);
                var div = (from d in db.Divisions where d.BranchID == bid select d).ToList();
                foreach (var d in div)
                {
                    division.Add(new SelectListItem { Selected = selected.Contains(d.DivisionID.ToString()), Text = d.Description, Value = d.DivisionID.ToString() });
                }
            }
        }

        return division;
    }
}

div的返回值在模型中被选中的item被选为true,但是在view侧没有被选中。

【问题讨论】:

  • 我不明白你的问题。是否只是如何设置下拉列表中选择的值?
  • 是的,我想获取要选择的值,这些值之前在页面加载时存储在数据库中。

标签: c# asp.net-mvc asp.net-mvc-3 razor html.dropdownlistfor


【解决方案1】:

使用ListBoxFor 代替DropDownListFor

@Html.ListBoxFor(m => m.branch, CommonMethod.getBranch("", Model.branch), "--Select--")

@Html.ListBoxFor(m => m.division, CommonMethod.getDivision(Model.branch, Model.division), "--Select--")

branchdivision 属性显然必须是包含所选值的集合。

以及使用视图模型构建多选下拉列表的正确方法的完整示例:

public class MyViewModel
{
    public int[] SelectedValues { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}

将被填充到控制器中:

public ActionResult Index()
{
    var model = new MyViewModel();

    // preselect items with values 2 and 4
    model.SelectedValues = new[] { 2, 4 };

    // the list of available values
    model.Values = new[]
    {
        new SelectListItem { Value = "1", Text = "item 1" },
        new SelectListItem { Value = "2", Text = "item 2" },
        new SelectListItem { Value = "3", Text = "item 3" },
        new SelectListItem { Value = "4", Text = "item 4" },
    };

    return View(model);
}

在视图中:

@model MyViewModel
...
@Html.ListBoxFor(x => x.SelectedValues, Model.Values)

HTML 助手会自动预选值与SelectedValues 属性匹配的项目。

【讨论】:

  • 如果我想显示所有值然后要求用户选择多个选项并在用户提交后发布多个选择的选项怎么办?上述方法是否可行。如果不是,请告诉我它是如何完成的。我本可以创建单独的问题,但我觉得这个答案非常接近我想要的......
【解决方案2】:

对我来说,它也适用于@Html.DropDownListFor

型号:

public class MyViewModel
{
    public int[] SelectedValues { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}

控制器:

public ActionResult Index()
{
    var model = new MyViewModel();

    // the list of available values
    model.Values = new[]
    {
        new SelectListItem { Value = "2", Text = "2", Selected = true },
        new SelectListItem { Value = "3", Text = "3", Selected = true },
        new SelectListItem { Value = "6", Text = "6", Selected = true }
    };

    return View(model);
}

剃须刀:

@Html.DropDownListFor(m => m.SelectedValues, Model.Values, new { multiple = "true" })

在控制器中提交的 SelectedValues 如下所示:

【讨论】:

  • 不同之处在于您已经在 Model.Values 中将 listitem 值设置为 selected,并且您根本不使用 SelectedValues。尝试删除“selected = true”并将一些 int 添加到 SelectedValues,然后它不能按预期工作。反正不适合我。
  • 没有像答案预期的那样为我工作。显然,@MartinBring 指出的是真的。可能是答案需要一点编辑。我不知道它是如何得到这么多赞成票的,不知道他们是否真的在投票前尝试过。
【解决方案3】:

虽然很老的线程,但在此处关注其他答案后发布此答案,不幸的是,这对我不起作用。因此,对于那些最近或不久的将来可能在这里偶然发现的人,以下是对我有用的方法。

This is what helped me

我的收获是MultiSelectList 类,而我使用的是SelectList

不知道 2012 年或 2015 年的情况。但是,现在这两个辅助方法 @Html.DropDownListFor@Html.ListBoxFor 辅助方法都接受 IEnumerable&lt;SelectListItem&gt; 所以你不能传递任何随机的 IEnumerable 对象并期望这些辅助方法做好工作。

这些辅助方法现在还接受 SelectListMultiSelectList 类的对象,您可以在其中创建对象时直接传递选定的值。

例如,请参阅下面的代码,我是如何创建多选下拉列表的。

@Html.DropDownListFor(model => @Model.arrSelectUsers, new MultiSelectList(Model.ListofUsersDTO, "Value", "Text", @Model.arrSelectUsers),
                                                    new
                                                    {
                                                        id = "_ddlUserList",
                                                        @class = "form-control multiselect-dropdown",
                                                        multiple = "true",
                                                        data_placeholder = "Select Users"
                                                    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多