【问题标题】:How can I manually add another model to view?如何手动添加另一个模型来查看?
【发布时间】:2016-07-21 15:15:08
【问题描述】:

当我创建名为 Products 的视图时,我通过视图生成器窗口为其指定了模型 Product 并使用该模型显示数据库中的产品

@foreach (var item in Model)
    {
        <div class="col-md-3 col-sm-3 col-column productbox">
            <img src="@Url.Content(item.ProductImg)" class="img-responsive" >
            <div class="producttitle">@Html.DisplayFor(modelItem => item.ProductName)</div>
            <div class="producttitle">@Html.DisplayFor(modelItem => item.ProductDesc)</div>
            <div class="productprice"><div class="pull-right"><a href="#" class="btn btn-danger btn-sm" role="button">BUY</a></div><div class="pricetext">@Html.DisplayFor(modelItem => item.ProductPrice)</div></div>
        </div>

    }

现在我想在与操作链接相同的视图上从数据库生成类别列表,因此当用户点击时,它会显示该类别的产品...类似这样的

<div class="col-md-2">
    <ul>

@foreach (var item in Model)
{
    <li>
        @Html.ActionLink(@Html.DisplayFor(modelItem => item.CategoryName).ToString(),"Products",new { controller="Home",action="Products",id=modelItem=>item.CategoryID})
    </li>

}
    </ul>
</div>

但我需要以某种方式在视图中包含类别模型,就像产品包含这样的模型

@model IEnumerable<OnlineProdajaSlika.Models.Product>

我是 mvc 新手,无法弄清楚,感谢任何帮助

【问题讨论】:

  • 创建一个新的“复合模型”,其中包含您需要的所有内容,包括Product 和Category 的列表。
  • 所以不可能在该视图中包含其他模型?

标签: asp.net asp.net-mvc asp.net-mvc-4 view viewmodel


【解决方案1】:

您可以为此视图创建特定的新视图模型。

public class ProductsAndCategoriesVm
{
  public IEnumerable<Product> Products {set;get;}
  public IEnumerable<Category> Categories {set;get;}
  public ProductsAndCategoriesVm()
  {
    Products = new List<Product>();
    Categories = new List<Category>();
  }
}

在您的 GET 操作中,创建一个 this 对象,分配两个属性值并将其发送到视图

public ActionResult Index()
{
  var vm = new ProductsAndCategoriesVm();
  // Set vm.Products
  //  vm.Products=dbContext.Products.ToList();
  // Set vm.Categories
  //  vm.Categories=dbContext.Categories.ToList();
  return View(vm);
}

现在你的视图应该被强类型化到这个视图模型

@model ProductsAndCategoriesVm
<h1>Products</h1>
@foreach(var p in Model.Products)
{
  <p>@p.ProductName</p>
}
<h1>Categories </h1>
@foreach(var c in Model.Categories)
{
  <p>@Html.ActionLink(c.CategoryName,"Products","Home",new { @id=c.CategoryID},null)</p>
}

【讨论】:

    【解决方案2】:

    我认为您所追求的是具有一个或多个属性的视图模型,例如:

    public class ProductsViewModel
    {
        // Property to hold your products
        public IEnumerable<Product> Products { get; set; }
    
        // Property to hold the category details
        public IEnumerable<Category> Categories { get; set; }
    }
    
    public class Category
    {
        public string CategoryName { get; set; }
    }
    
    public class Product
    {
        public string ProductName { get; set; }
    }
    

    然后您可以在控制器操作中填充这些详细信息并返回此模型:

    public MyController : Controller
    {
        public ActionResult ProductsPage()
        {
            var viewModel = new ProductsViewModel
            {
                Products = new List<Product>(),
                Categories = new List<Category>()
            };
    
            // Populate the products
            viewModel.Products.Add(new Product { ProductName = "Product 1" });
            viewModel.Products.Add(new Product { ProductName = "Product 2" });
    
            // Populate the categories on the same view model
            viewModel.Categories.Add(new Category { CategoryName = "Category 1" });
            viewModel.Categories.Add(new Category { CategoryName = "Category 2" });
    
            // Return the view model with all of the details
            return View(viewModel);
        }
    }
    

    然后在你的视图中定义这个视图模型并循环你的数据:

    @model ProductsViewModel
    
    @* Loop the products in the model *@
    @foreach(var product in Model.Products)
    {
        <div>@product.ProductName</div>
    }
    
    @* Loop the categories in the model *@
    @foreach (var category in Model.Categories)
    {
        <div>@category.CategoryName</div>
    }
    

    【讨论】:

    • 所以现在我删除了旧的单独类 Product 和 Category 并按照您向我展示的正确方式进行操作?顺便说一句,非常感谢你回答它的惊人
    • 每个视图或局部视图只能有 1 个模型,因此您必须这样做。很高兴为您服务 :) 祝你好运!
    猜你喜欢
    • 2019-07-02
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多