如何手动添加另一个模型进行查看?

How can I manually add another model to view?

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

@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 新手,无法理解,感谢您的帮助

您可以创建一个特定于此视图的新视图模型。

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 操作中创建一个对象,分配两个 属性 值并将其发送到视图

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>
}

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

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; }
}

然后您可以在您的控制器操作和return这个模型中填充这些细节:

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>
}