在一个视图中有两个模型的方法是可能的
本文关键字:模型 方法 两个 一个 视图 | 更新日期: 2023-09-27 18:29:05
是否可以将两个模型放在一个视图中?我的页面在一个模型下运行良好,但当我试图在代码下面添加另一个模型行时,我的代码决定开始出现一些错误:
@model ProjectShop.Models.Delivery
在我添加上面的行之前,我的代码如下所示:
@model ProjectShop.Models.Products
@{
ViewBag.Title = "Products";
Layout = "~/Views/Shared/_ProductLayout.cshtml";
}
<p>@Html.DisplayFor(model => model.productname) </p>
在一个视图中有两个模型,使我能够调用来自两个源的数据,这种方法是什么?
编辑:
这是一个新的类,它将作为html页面的视图模型,但我认为它根本不正确:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProjectShop.Models;
namespace ProjectShop.ViewModels
{
public class ProductDelivTimes
{
public Models.Products;
public Models.Delivery;
}
}
编辑:
public class ProductDelivTimes
{
public Models.Products ProductModel;
public Models.Delivery DeliveryModel;
}
在我的html文件中:
@model IEnumerable<ProjectShop.ViewModels.ProductDelivTimes>
编辑:
@model IEnumerable<ProjectShop.ViewModels.PerformanceTimes>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var grid = new WebGrid(Model, rowsPerPage: 5, defaultSort: "Name");
ViewBag.Created = TempData["ProductCreated"];
ViewBag.Created = TempData["ProductDeleted"];
}
@grid.GetHtml(
tableStyle: "grid",
headerStyle: "gridhead",
rowStyle: "gridRow",
alternatingRowStyle: "gridRow",
mode: WebGridPagerModes.All,
columns: grid.Columns(
grid.Column("Image", format: @<text><img src="@item.image" alt="" width="84px" height="128px"/></text>, style: "Image"),
grid.Column("Products", format: @<text>@Html.Raw(item.Products.name.Substring(0, item.Products.name.IndexOf(".") + 1))</text>, style: "Products")
))
如果您想将多个域实体作为视图的一部分,请考虑创建一个将两个数据源模型组合在一起的视图模型
类似(只是伪代码):
ProductDeliveryViewModel
{
// ProductModel
// DeliveryModel
}
所以你会有
@model ProjectShop.Models.ProductDeliveryViewModel
@Html.DisplayFor (model=> model.ProductModel.Property)
@Html.DisplayFor (model=> model.DeliveryModel.Property)
也许可以编写一个包含两个数据源模型的包装器模型,并在需要时决定从哪一个模型获取数据?
我所在的团队将使用ViewModel类将两个业务对象包装成一个可供视图使用的对象。它可以简单到为每个对象都有一个属性。
在过去,我通过使用第三个"容器"模型实现了这一点。
public class MainModel
{
public ProductModel productModel {get;set;}
public DeliveryModel deliveryModel {get;set;}
}