我尝试在我的视图中填充DropDownListFor,但我似乎没有让它工作。
我的模特
public class Warehouse
{
public int Id { get; set; }
public string Description { get; set; }
public string LocationCode { get; set; }
public IEnumerable<SelectListItem> LocationList
{
get
{
DbEntities db = new DbEntities();
var List = new SelectList(db.Locations, "LocID".Trim(), "Desc".Trim());
return List;
}
set { }
}
}
在我的ViewPage中,我有以下代码
@model IEnumerable<MyApp.Models.Warehouse>
<!-- some html -->
@foreach(var s in Model)
{
@Html.DropDownListFor(p => s.LocationCode, s.LocationList, "", new { @class = "form-control" })
}
我想通过设置p => s.LocationCode
我为下拉列表设置了初始选择的值(如果s.LocationCode == null
,则所选值应为空),但我的结果是所有下拉框都有一个初始值空值(当我点击其中一个时,您会看到填充下拉列表。)
答案 0 :(得分:0)
首先,当您提交时,这不会绑定。您无法在foreach
循环中生成表单控件,因为它会生成与您的模型无关的重复name
属性(由于重复的id
属性,它还会生成无效的html。如果您检查html你会看到它的
<select name="s.LocationCode" ... >
<select name="s.LocationCode" ... >
需要的地方
<select name="[0].LocationCode" ... >
<select name="[1].LocationCode" ... >
你的循环需要
@model List<MyApp.Models.Warehouse> // must implement IList<T>
....
@for(int i = 0; i < Model.Count; i++)
{
@Html.DropDownListFor(m => m[i].LocationCode, Model[i].LocationList, ...)
另一种方法是为EditorTemplate
Warehouse
在/Views/Shared/EditorTemplates/Warehouse.cshtml
@model Warehouse
....
@Html.DropDownListFor(m => m.LocationCode, Model.LocationList, ...)
然后在主视图中
@model IEnumerable<MyApp.Models.Warehouse> // can be Enumerable<T>
....
@Html.EditorFor(m => m)