如果返回到View的模型是IEnumerable

时间:2017-10-28 11:41:28

标签: c# .net asp.net-mvc

我显然错过了一些东西。 我认为填充DropDownListFor就像从控制器返回列表一样简单。

在我的控制器中,我回来了:

public ActionResult ListCollege()
        {
            return View(db.Colleges.ToList());
        }

在视图中我将模型设置为:

@model  IEnumerable<CollegeApp.Models.DataModels.College>

但这显然不是填充DropDownListFor助手的正确方法。

我一直在做一些阅读,我不完全确定“新的SelectList”的角色是DropDownListFor中的第二个参数,它的意思是IENumerable类型。

我不太明白这个IENumberable是如何从模型/控制器传递到视图的。

由于

1 个答案:

答案 0 :(得分:1)

要有效地使用DropDownListFor辅助方法,您需要使用视图模型的属性作为表达式参数传递,该参数将是lambda表达式。帮助器将构建SELECT元素,其nameId属性值与该属性名称匹配。帮助器的第二个参数是SelectListItem的集合,它将用作源数据来构建下拉列表的选项。

所以在你的情况下,创建一个视图模型,它有2个属性,一个用于集合,一个用于选定的值

public class CollageSelectionVm
{
   public IEnumerable<SelectListItem> Collages { set;get;}
   public int SelectedCollage { set;get;}
}

在您的GET操作中,创建此视图模型的对象,加载Collages集合属性并将该对象发送到视图

public ActionResult ListCollege()
{
    var vm = new CollageSelectionVm () ;
    vm.Collages = db.Collages
                    .Select(x=>new SelectListItem { Value = x.Id.ToString(),
                                                    Text=x.Name })
                    .ToList();
    return View(vm);
}

现在,在您的视图模型中强类型的视图中,您将使用DropDownListFor帮助程序

@model CollageSelectionVm

@Html.DropDownListFor(a => a.SelectedCollage , Model.Collages , "Select one")