1

これは、各州のチェックボックスを使用して州の固定リストを表示するための私のエディター テンプレートです。

@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; }
}

このコードは、9 つ​​の州の固定リストと、申請者が選択した州の可変リストを読み取ります。ID が申請者の州にある固定州の州は、WillRelocateフラグが true でマークされ、そのチェックボックスがオンになっていることを示します。

4

1 に答える 1

2

問題は次の行にあると思います:

@Html.EditorFor(m => item)

これを試して:

@Html.EditorForModel(item)

同様の質問: Html.EditorForModel() を使用しない理由

追加した:

特別なフォルダーには という名前を付ける必要がEditorTemplatesあり、親フォルダーにはコントローラー (たとえばHome) またはShared(すべてのコントローラーの場合) という名前を付ける必要があり、ビュー名はApplicantRelocateProvinceItem.cshtmlクラス名にする必要があります。

于 2013-01-22T08:34:42.143 に答える