我有一个名为Region
的简单模型,就像
namespace App
{
using System;
using System.Collections.Generic;
public partial class Region
{
public int RegionID { get; set; }
public string RegionDescription { get; set; }
}
}
我试图将模型加载到视图中的HTML DropDownListFor()
帮助器中,如
@model IEnumerable<App.Region>
<div class="row">
@Html.DropDownListFor("RegionList",
new SelectList(model => model.RegionDescription),
"Select Region",
new { @class = "form-control" })
</div>
或
@model IEnumerable<App.Region>
<div class="row">
@Html.DropDownListFor("RegionList",
new SelectList(s => s.RegionDescription),
"Select Region",
new { @class = "form-control" })
</div>
或:
@model IEnumerable<App.Region>
<div class="row">
@foreach (var item in Model)
{
@Html.DropDownListFor("RegionList",
new SelectList(model => item.RegionDescription),
"Select Region",
new { @class = "form-control" })
}
</div>
但在这两种方式中我都收到了这个错误。
无法将lambda表达式转换为'object'类型,因为它不是a 委托类型
你能否告诉我为什么会这样,以及如何解决这个问题?
答案 0 :(得分:1)
SelectList
构造函数将集合作为第一个参数。不是lamda表达!您正在以不正确的方式使用帮助程序方法!
理想情况下,Html.DropDownListFor
方法的第一个参数是一个表达式,帮助程序可以从中获取视图模型属性的值。这意味着,要使用它,您的视图模型应具有存储所选选项值的属性。所以创建一个像这样的视图模型
public class CreateVm
{
public int SelectedRegion { set;get;}
public List<SelectListItem> Regions { set;get;}
}
现在在您的GET操作中,您需要创建此视图模型的对象,加载Regions集合属性并将其发送到视图
public ActionResult Create()
{
var vm = new CreateVm();
vm.Regions = new List<SelectListItem>{
new SelectListItem { Value="1", Text="Region1"},
new SelectListItem { Value="2", Text="Region2"},
new SelectListItem { Value="3", Text="Region3"}
};
return View(vm);
}
并且在您的视图中强烈键入此新视图模型,您可以使用此类DropDownListFor
辅助方法
@model CreateVm
@Html.DropDownListFor(x=>x.SelectedRegion,Model.Regions,"Select Region",
new { @class = "form-control" })
或如果您确实想要使用传递给视图的现有视图模型/类型,可以考虑使用Html.DropDownList
辅助方法来渲染SELECT元素
@Html.DropDownList("SelectedRegion",
new SelectList(Model, "RegionID", "RegionDescription"), "Select Region",
new { @class = "form-control" })
这将呈现名为"SelectedRegion"