MVC MultiSelectList默认值被忽略

时间:2015-09-11 15:16:44

标签: asp.net-mvc

我正在尝试创建一个多选列表并指定下拉列表的默认值,但我提供的默认值将被忽略。

我的控制器看起来像这样:

var ProvisionFromDb = (from Provision in db.Provisions
                      orderby Provision.Provision1 ascending
                      select new SelectListItem
                          {
                              //select all items
                              Selected = true,
                              Text = Provision.AltDescription,
                              Value = Provision.Provision1.ToString()
                          }).ToList();
ViewBag.ProvisionDropdown = new MultiSelectList(ProvisionFromDb, "Value", "Text");

在我看来,我有以下声明:

@Html.ListBox("ProvisionId", (MultiSelectList)ViewBag.ProvisionDropdown)

一切正常,但默认值未被选中。我假设这是因为MultiSelectList无法识别SelectList对象中的selected属性。 解决这个问题最简单的方法是什么?

其他信息:在剃刀视图声明中," ProvisionId"表示正在创建的选择下拉列表的名称/ ID。

2 个答案:

答案 0 :(得分:2)

这里的解决方案是将默认值放入重载的MultiSelectList构造函数中,其中第4个参数是表示默认选定项的值的数组。

就我而言,我不需要定义模型。以下工作:

ViewBag.ProvisionDropdown = new MultiSelectList(ProvisionFromDb, "Value", "Text", new[] {"Selected Value1","Selected Value2"});

linq查询也可以用于根据" Selected"生成此数组。 SelectListItem的属性。

答案 1 :(得分:1)

呈现为选中的选项取决于您绑定的值。这里,即" ProvisionId"。如果这是您模型上的属性,则应使用ListBoxFor代替,然后将其设置为您要选择的Provision1值列表。如果它不是您模型上的属性,则可以使用该列表设置ViewBag.ProvisionId之类的内容。