我需要创建一个显示订单标题信息的视图,我需要添加一个显示行项目网格的标签视图。部分视图将从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 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。