为什么我的编辑器模板根本不呈现?

时间:2013-01-22 08:24:11

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

这是我的编辑器模板,用于显示省份的固定列表,每个省都有一个复选框:

@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,以显示其复选框已选中。

1 个答案:

答案 0 :(得分:2)

我认为问题可能就在这一行:

@Html.EditorFor(m => item)

试试这个:

@Html.EditorForModel(item)

类似的问题:Why not use Html.EditorForModel()

<强>加了:

特殊文件夹必须命名为EditorTemplates,父文件夹必须命名为控制器(例如Home)或Shared(适用于所有控制器),视图名称必须为{{1} }作为班级名称。