如何将SelectList值分配给模型中的IEnumerable <selectlistitem>属性

时间:2016-05-14 04:20:38

标签: c# asp.net-mvc

我正在尝试改进我在MVC模型和视图中创建SelectLists的方式。

有人在我的代码的早期版本中评论过我对new的使用过多。在下面显示的模型中,我确实看到在SelectList的定义中使用new两次。但是,我不知道如何编写代码,这是我在示例中看到的唯一方法。还有更好的方法吗?

在模型类中,我将SelectList值分配给IEnumerable<StudentRoster> StudentRosters,然后可以在View中访问。

这就是我在View中创建DropDownList的方法。

<p>Select a campus: @Html.DropDownListFor(m=>m.SelectedCampus,Model.CampusList)

这是我在模型中定义SelectList的方法。

public class SampleViewModel
{           
    // This IEnumerable is a SelectList in the Html.BeginForm() block
    public IEnumerable<SelectListItem> CampusList { get; set; }

    public string SelectedCampus { get; set; }        

    // This list is the "table" shown in the View that the SelectList filters
    public IEnumerable<StudentRoster> StudentRosters { get; set; }        
}

控制器:

public ActionResult FilterableIndex(string SelectedCampus="MRA")
{
    StudentRosterViewModel vm = new StudentRosterViewModel();

    vm.StudentRosters = db.StudentRosters
        .Where(m => m.Campus == SelectedCampus)     
        .ToList();

    vm.SelectedCampus = SelectedCampus;
    vm.CampusList = new SelectList(new List<string> 
                     {"CRA","DRA","MRA","PRA" });

    return View(vm);
}

这是正确的编码还是这是一个养成坏习惯的例子?

1 个答案:

答案 0 :(得分:1)

您的视图模型,只需在项目构建时将项目提供给视图模型,并从中生成SelectListItems。 @Rubix_Revenge,这是控制器的工作。

无论如何,这是正确的方式

CampusList = new SelectList(new List<string> {"CRA","DRA","MRA","PRA" });