【问题标题】:Bind viewmodel to partial view将视图模型绑定到局部视图
【发布时间】:2016-10-23 12:52:54
【问题描述】:

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

所以我的主要模型是“广告”,它有 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");}

然后我收到以下错误:

App_Web_gdyh352c.dll 中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理

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

谢谢。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-partialview


    【解决方案1】:

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

    更多信息请参见MVC Html.Partial or Html.Action

    【讨论】:

    • 非常感谢,这行得通。你能否告诉我一个疑问,这种方法是否好(从性能的角度来看),我最终会用 3 个不同的 vm 调用 3 个 Html.Action 方法。
    • 它在 MVC 中很常见。您仍在加载相同的数据 - 您需要在某些时候从控制器调用它。您的另一个选择是为主视图创建 1 个大视图模型并使用例如@Html.Partial("_partialName", model.Realty)
    【解决方案2】:

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

     @await Html.PartialAsync("_YourPartialViewName", YourModel)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      相关资源
      最近更新 更多