我正在尝试为MultiSelectList设置选定的值,但页面不会显示任何选定的值。我已经尝试过每一种实用的方法来做到这一点并且仍然得到相同的结果。我目前正在尝试通过构造函数传递所选对象的列表。让我感到震惊的是,当我检查MultiSelectList对象时,selectedvalues属性包含我使用构造函数传递给它的项目,但它仍然不显示。
我注意到很多人遇到了同样的问题,但我没有看到一个对我有用的答案。我已经尝试遍历列表并将selected属性设置为true,我尝试从头创建多选列表并设置每个单独的项选择属性,我尝试使用构造函数。这些都没有奏效。我还发现了一个建议,即MultiSelectList属性的名称与控件(我尝试过的)相同,但不起作用。为什么使用此框架创建包含所选值的下拉列表如此困难?我错过了什么吗?
<label for="StatesOfPractice">States of Practice:</label>
<br />
<%= Html.ListBox("StatesOfPractice", Model.StatesOfPracticeList)%>
<br />
<%= Html.ValidationMessage("StatesOfPractice")%>
当我实例化MultiSelectList时,似乎正在发生这种情况。如果我在视图中检查对象并打开结果视图,我可以看到当我知道它应该是“阿拉斯加”时没有被选中。
我正在这样实例化。
new MultiSelectList(List<GenericDataContract>, "Code", "Description", List<GenericDataContract>);
GenericDataContract只是一个具有两个属性Code和Description的类。第一个列表是所有状态,第二个列表是我选择的状态。
答案 0 :(得分:8)
Grrrrrr,我发现了它。显然,所选项目只能是字符串列表。一旦我修改了我的代码以传递它,就选择了这些值。
答案 1 :(得分:4)
问题我让MultiSelectList
显示所选的默认值是因为我使用@Html.DropDownListFor(...)
来显示多选列表而不是@Html.ListBoxFor(...)
。令人困惑的是,DropDownListFor
将显示多选列表,如果您指定HTML属性以强制它这样做,但默认值将不会工作,因为它是只打算有一个默认值 - 因此不将选择任何默认值:
List<string> myStrings;
myStrings = new List<string>();
myStrings.Add("aaa");
myStrings.Add("bbb");
myStrings.Add("ccc");
ViewData["MyStringsDropdown"] = new MultiSelectList(
myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }),
"StringId",
"Title",
myStrings.Where(str => str == "aaa" || str == "ccc").ToList()
);
...
@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })
但是,以下将显示所选的“aaa”和“ccc”的默认值:
@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })
但这是真正的踢球者; ASP.NET有时似乎是缓存控件的类型,因此您可以将DropDownListFor
替换为ListBoxFor
,它仍然不会预先选择任何默认值您重新启动IIS工作进程。我发现这真的很奇怪,它让我感到很沮丧。
答案 2 :(得分:1)
我认为它从模型中提取所选项目,而不是从项目列表中提取。确保您的StatesOfPractice
模型属性填充了您想要选择的项目。也就是说,StatesOfPracticeList
模型属性提供用于填充列表的项集。模板属性StatesOfPractice
(在发布表单时将是所选属性值的集合)还应包含呈现视图时的默认选定值。在引擎盖下,它使用HtmlHelper GetModelStateValue
方法查找任何选择列表的选定值。我认为这样做是为了在存在验证错误时维护所选值并且使用模型状态错误重新呈现表单更简单。