我可以有一个MVP列表使用一个模型内的列表

本文关键字:列表 一个 模型 MVP 有一个 我可以 | 更新日期: 2023-09-27 18:16:56

我知道我可以有一个这样的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>

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

我可以有一个MVP列表使用一个模型内的列表

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

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

最后我这样做了:

@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)