如何手动添加另一个模型进行查看?
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>
}
当我创建名为 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>
}