将视图模型绑定到局部视图

Bind viewmodel to partial view

我有一个模型,可以代表3个类别。在我看来,我想为每个类别制作 3 个不同的表格,并包含相关字段。我认为为此我需要为每个类别使用带有视图模型的局部视图。

所以我的主要模型是 "Ad",它有 3 个子视图模型(房地产、汽车和服务)。 这是我如何在家庭控制器上实现 Realty 操作的示例:

public ActionResult Realty()
    {
        var ads = db.Ads.Include(a => a.Realty);
        var vm = new List<RealtyViewModel>();

        foreach (var ad in ads)
        {
            vm.Add(new RealtyViewModel
            {
                Title = ad.Title,
                Descirpiton = ad.Descirpiton,
                Type = ad.Realty.Type,
                NumberOfRooms = ad.Realty.NumberOfRooms
            });
        }

        return PartialView(vm);
    }

然后我的局部视图是这样的:

@model IEnumerable<OGAS.Areas.Category.ViewModels.RealtyViewModel>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Type)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Descirpiton)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NumberOfRooms)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Type)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Descirpiton)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.NumberOfRooms)
            </td>
        </tr>
    }

</table>

然后在我的索引页面中(不使用任何模型),我这样调用局部视图:

@{Html.RenderPartial("Realty");}

但随后出现以下错误:

'System.NullReferenceException' 类型的异常发生在 App_Web_gdyh352c.dll 但未在用户代码中处理

能否请您告知这种方法是否好(调用 3 个虚拟机),如果是,如何实施?

谢谢。

尝试替换 @{Html.RenderPartial("Realty");} 并在这种情况下使用 @Html.Action("Realty"),因为您需要回调控制器操作,以便为局部视图创建模型。

有关详细信息,请参阅 MVC Html.Partial or Html.Action

将此用于 .net 核心和 mvc。 @Html.Action 已从 .net 核心

中删除
 @await Html.PartialAsync("_YourPartialViewName", YourModel)