这是我的编辑器模板,用于显示省份的固定列表,每个省都有一个复选框:
@model Comair.RI.UI.Models.ApplicantRelocateProvinceList
<table>
<tr>
<th style="display: none;"></th>
<th>
@Html.DisplayNameFor(model => model.HeaderItem.Province)
</th>
<th>
@Html.DisplayNameFor(model => model.HeaderItem.WillRelocate)
</th>
</tr>
@foreach (var item in Model.Items)
{
@Html.EditorFor(m => item)
}
</table>
这是Model.Items
类型模型的编辑器模板:
@model Comair.RI.UI.Models.ApplicantRelocateProvinceItem
<tr>
<td style="display: none;">
@Html.HiddenFor(m => m.Id)
</td>
<td>
@Html.DisplayFor(m => m.Province.Name)
</td>
<td>
@Html.EditorFor(m => m.WillRelocate)
</td>
</tr>
我已成功将此模型用于其他视图模型。这是ApplicantRelocateProvinceList
模型:
public class ApplicantRelocateProvinceList : ViewModel
{
public ApplicantRelocateProvinceItem HeaderItem { get; set; }
public ApplicantRelocateProvinceList()
{
HeaderItem = new ApplicantRelocateProvinceItem();
}
public void MapFromEntityList(IEnumerable<ApplicantRelocateProvince> applicantProvinces)
{
var service = new ProvinceService(DbContext);
var selectedIds = applicantProvinces.Select(ap => ap.ProvinceId);
Items = service.ReadProvinces()
.Where(i => !i.IsDeleted)
.Select(p => new ApplicantRelocateProvinceItem {Id = p.Id, Province = p, WillRelocate = selectedIds.Contains(p.Id)});
}
public IEnumerable<ApplicantRelocateProvinceItem> Items { get; set; }
}
此代码读取我们九个省份的固定列表,以及申请人选择的省份变量列表。 ID在申请人所在省份的固定省份标记为WillRelocate
标志为true,以显示其复选框已选中。
答案 0 :(得分:2)
我认为问题可能就在这一行:
@Html.EditorFor(m => item)
试试这个:
@Html.EditorForModel(item)
类似的问题:Why not use Html.EditorForModel()
<强>加了:强>
特殊文件夹必须命名为EditorTemplates
,父文件夹必须命名为控制器(例如Home
)或Shared
(适用于所有控制器),视图名称必须为{{1} }作为班级名称。