我可以让MVP列表在模型中使用List吗?

时间:2015-10-08 13:01:29

标签: c# razor asp.net-mvc-5

我知道我可以拥有这样的MVP列表:

@model IEnumerable<PublicationSystem.ViewModels.ProfileSnapshotViewModel>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Salutation)
        </th>
    </tr>
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Salutation)
            </td>
        </tr>
    }
</table>

但我想使用这样的模型:

public class ProfileSnapshotListViewModel
{
    public Guid ResourceAssignedToId { get; set; }
    public IEnumerable<PublicationSystem.ViewModels.ProfileSnapshotViewModel> Snapshots { get; set; }
}

我希望我的观点最终如下:

@model PublicationSystem.ViewModels.ProfileSnapshotListViewModel

<div id="pnlResourceSnapshotEdit">
    @{ Html.RenderAction("_ResourceSnapshotEdit", "Profiles", new { id = Model.ResourceAssignedToId }); }
</div>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Snapshots.Salutation)
        </th>
    </tr>
    @foreach (var item in Model.Snapshots) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Salutation)
            </td>
        </tr>
    }
</table>

我可以将这样的模型用于列表吗?这可能吗?如何设置列表以使用快照列表?

2 个答案:

答案 0 :(得分:0)

是的,这当然是可能的。你几乎在语法上正确。使用Razor,您需要使用for循环来保持对模型的引用,以便Razor知道如何构建模型:

@for(int i = 0; i < Model.Snapshots.Length; i++) {
    <tr>
        <td>
            @Html.DisplayFor(model => model.Snapshots[i].Salutation)
        </td>
    </tr>
}

答案 1 :(得分:0)

我最终这样做了:

@model PublicationSystem.ViewModels.ProfileSnapshotListViewModel

<div id="pnlResourceSnapshotEdit">
    @{ Html.RenderAction("_ResourceSnapshotEdit", "Profiles", new { id = Model.ResourceAssignedToId }); }
</div>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Snapshots.FirstOrDefault().Salutation)
        </th>
    </tr>
    @foreach (var item in Model.Snapshots) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Salutation)
            </td>
        </tr>
    }
</table>

这给了我想要的标题和项目。

我在寻找的是:

@Html.DisplayNameFor(model => model.Snapshots.FirstOrDefault().Salutation)