我有字符串列表,我在这些字符串中有一个选定的项目 控制器:
ViewBag.GroupName = new SelectList(Names, Names.Find(s=>s==Place.GroupName));
查看:
@Html.DropDownListFor(model => model.GroupName, (IEnumerable<SelectListItem>)ViewBag.GroupName)
但是视图上的选择始终是列表中第一个不符合预期的项目。 可能是什么问题。
答案 0 :(得分:2)
您需要确保传递给Html.DropDownListFor
的第一个参数设置为当前应选择的SelectListItem
的值。如果它的值与DropDownList中的任何值不匹配,则不会将任何项设置为选中。
在您的情况下,您需要确保model.GroupName
设置为当前应选择的SelectListItem的值。
示例:强>
的.cs:
class myViewModel
{
public string SelectedValue = "3";
public List<SelectListItem> ListItems = new List<SelectListItem>
{
new SelectListItem { Text = "List Item 1", Value = "1"},
new SelectListItem { Text = "List Item 2", Value = "2"},
new SelectListItem { Text = "List Item 3", Value = "3"}
};
}
.cshtml:
@model myViewModel
@Html.DropDownListFor(m => m.SelectedValue, Model.ListItems)
答案 1 :(得分:0)
尝试按照以下方式投射您的列表:
@Html.DropDownListFor(model => model.GroupName, (IEnumerable<SelectList>)ViewBag.GroupName)
答案 2 :(得分:0)
您还应该向SelectList提供有关Text / Value的信息。我想Names是一个字符串列表,所以你应该这样做:
从Names
创建一个SelectListItem列表:
ViewBag.GroupName = (from s in Names
select new SelectListItem
{
Selected = s == Place.GroupName,
Text = s,
Value = s
}).ToList();
然后在视图中使用它:
@Html.DropDownList("GroupName") /*Will get from the ViewBag the list named GroupName*/