加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何填充mvc剃刀部分视图

发布时间:2020-12-16 00:34:03 所属栏目:asp.Net 来源:网络整理
导读:我需要创建一个显示订单标题信息的视图,我需要添加一个显示行项目网格的标签视图。部分视图将从viewmodel中强力输入。我明白我应该使用html helper @ Html.Partial(“Path / view”)。我直到现在才使用控制器打开视图,在将视图模型发送到视图之前填充视图
我需要创建一个显示订单标题信息的视图,我需要添加一个显示行项目网格的标签视图。部分视图将从viewmodel中强力输入。我明白我应该使用html helper @ Html.Partial(“Path / view”)。我直到现在才使用控制器打开视图,在将视图模型发送到视图之前填充视图模型。由于部分视图被从html帮助器调用,我想知道是什么将是使用模型数据填充parital视图的最佳方式。

解决方法

选项1:从父页面继承

默认情况下,通过调用@ Html.Partial(“PartialViewName”)呈现的任何部分视图将获取传递给父视图的视图模型。

所以如果你有

查看模型

namespace MyNamesapce
{
    public OrderInfoViewModel
    {
        public string OrderTitle { get; set; }
        public IEnumerable<OrderItem> OrderItems { get; set; }
    }
}

OrderInfo.cshtml

@model MyNamespace.OrderInfoViewModel

<h1>@Model.OrderTitle</h1>

@Html.Partial("OrderLineItems")

OrderLineItems页面应该得到一个MyNamespace.OrderViewModel传递给它…所以你的部分视图应该如下所示:

OrderLineItems.cshtml

@model MyNamespace.OrderInfoViewModel

foreach (var orderItem in Model.OrderItems)
{
    //Do stuff
}

选项2:指定模型

您可以使用第二个参数指定要传递的视图模型。即

OrderInfo.cshtml

@model MyNamespace.OrderInfoViewModel

<h1>@Model.OrderTitle</h1>

@Html.Partial("OrderLineItems",Model.OrderItems)

OrderLineItems.cshtml

@model IEnumerable<OrderItem>

foreach (var orderItem in Model)
{
    //Do stuff
}

选项3:使用部分动作

如果您需要重复使用多个页面的部分视图,则使用部分视图可能是一个好主意,因为无需使用相同的信息填充不同的视图模型,因为该页面将使用相同的部分。

例如。

查看模型

namespace MyNamesapce
{
    public OrderInfoViewModel
    {
        public string OrderTitle { get; set; }
    }
}

调节器

public class OrderController : Controller
{
    public ActionResult OrderInfo(int orderId)
    {
        OrderInfoViewModel viewModel = GetViewModel(orderId);
        return View(viewModel);
    }

    public PartialViewResult OrderLineItems(int orderId)
    {
        IEnumerable<OrderItem> orderItems = GetOrderItems(orderId);
        return Partial(orderItems);
    }
}

OrderInfo.cshtml

@model MyNamespace.OrderInfoViewModel

<h1>@Model.OrderTitle</h1>

@Html.Action("OrderLineItems")

OrderLineItems.cshtml

@model IEnumerable<OrderItem>

foreach (var orderItem in Model.OrderItems)
{
    //Do stuff
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读