在Html.DropDownlistFor中获取多个选定值

use*_*ser 31 c# asp.net-mvc html.dropdownlistfor razor asp.net-mvc-3

@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" })
Run Code Online (Sandbox Code Playgroud)

我有两个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

对于模型中的选定项,返回的除法值被选为true,但在视图侧,未选中它.

Dar*_*rov 57

使用a ListBoxFor而不是DropDownListFor:

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

@Html.ListBoxFor(m => m.division, CommonMethod.getDivision(Model.branch, Model.division), "--Select--")
Run Code Online (Sandbox Code Playgroud)

branchdivision性能显然必须将包含所选值的集合.

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

public class MyViewModel
{
    public int[] SelectedValues { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

将在控制器中填充:

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);
}
Run Code Online (Sandbox Code Playgroud)

并在视图中:

@model MyViewModel
...
@Html.ListBoxFor(x => x.SelectedValues, Model.Values)
Run Code Online (Sandbox Code Playgroud)

HTML帮助程序将自动预选其值与SelectedValues属性值匹配的项目.

  • ListboxFor救了我..想知道为什么dropdwnlist在这种情况下不起作用.. (2认同)

ton*_*nco 12

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

模型:

public class MyViewModel
{
    public int[] SelectedValues { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

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);
}
Run Code Online (Sandbox Code Playgroud)

剃刀:

@Html.DropDownListFor(m => m.SelectedValues, Model.Values, new { multiple = "true" })
Run Code Online (Sandbox Code Playgroud)

在控制器中提交的SelectedValues看起来像:

在此输入图像描述 在此输入图像描述

  • 不同之处在于您已经在 Model.Values 中将 listitem 值设置为 selected,并且您根本不使用 SelectedValues。尝试删除“selected = true”并向 SelectedValues 添加一些 int,然后它无法按预期工作。反正不适合我。 (2认同)