ASP.NET Razor下拉选择

时间:2013-07-17 16:22:40

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

我有字符串列表,我在这些字符串中有一个选定的项目 控制器:

ViewBag.GroupName = new SelectList(Names, Names.Find(s=>s==Place.GroupName));

查看:

 @Html.DropDownListFor(model => model.GroupName, (IEnumerable<SelectListItem>)ViewBag.GroupName)

但是视图上的选择始终是列表中第一个不符合预期的项目。 可能是什么问题。

3 个答案:

答案 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*/