Asp.net mvc 4 如何在编辑时预先填充选定的MultiHelp下拉列表

Asp.net mvc 4 如何在编辑时预先填充选定的MultiHelp下拉列表,asp.net-mvc-4,multi-select,jquery-chosen,Asp.net Mvc 4,Multi Select,Jquery Chosen,我在我的示例项目中使用的是选中的多选下拉列表 @Html.DropDownListFor(m => m.SelectedBranch, Model.BranchList, "Select", new { @class = "select-chosen form-control", @tabindex = "2", @id = "BranchId", @multiple = "multiple" }) 我的模型是 public string[] SelectedBranch { get;

我在我的示例项目中使用的是选中的多选下拉列表

@Html.DropDownListFor(m => m.SelectedBranch, Model.BranchList, "Select", new { @class = "select-chosen form-control", @tabindex = "2", @id = "BranchId", @multiple = "multiple" })
我的模型是

public string[] SelectedBranch { get; set; }
public IEnumerable<SelectListItem> BranchList { get; set; }
public string[]SelectedBranch{get;set;}
公共IEnumerable分支列表{get;set;}
我面临的问题是,在编辑已添加的数据时,我无法显示选定的值。我正在从数据库中获取所有选定的值


。请让我知道我要做什么来实现它。任何帮助都将不胜感激。谢谢

您需要使用
ListBoxFor()
(并且不使用
new{multiple=“multiple”}
)来生成绑定到您的模型的多重选择

@Html.ListBoxFor(m => m.SelectedBranch, Model.BranchList, "Select", new { @class = "select-chosen form-control", @tabindex = "2", @id = "BranchId" })

如果我的SelectedBranch是字符串而不是字符串数组,那么我可以执行sameNo。
ListBoxFor()
生成一个
,它回发一个值数组,因此属性必须是
IEnumerable
。另一方面,如果您使用
DropDownListFor()
(不添加
new{multiple=“multiple”}
,那么它将绑定到一个
string
属性,因为它只回发一个值作为旁注,因为这个问题,我添加了一个更详细的解释,解释了
DropDownListFor()的原因
with
new{multiple=“multiple”}
不起作用。我的问题是,我将字符串作为模型,并且我将所有预选值作为逗号分隔的字符串。是否可能编辑数据,因此您应该始终使用特定于视图的视图模型,该视图模型可以包含属性
IEnumerable SelectedBranch
,然后您可以使用 String.Join(…)当您在保存之前将视图模型映射到数据模型,并将
String.Split()
映射到另一个方向。但是为什么要保存逗号分隔的字符串?这被认为是一种糟糕的做法-请参阅本网站上众多问答中的一个,解释为什么它不好。