有一个小问题,我自己无法解决。我想在一个视图中使用相同的模型,但是一次使用IEnumerable <>,第二次不使用它。
我的看法:
@model IEnumerable<AMBIT_CMS_MVC.Areas.Admin.Models.Product>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>DYSKRET - FOLIE OKIENNE</title>
@Styles.Render("~/Content/Site.css")
@Styles.Render("~/Content/bootstrap.css")
@Scripts.Render("~/Scripts/jquery-1.10.2.min.js")
@Scripts.Render("~/Scripts/bootstrap.js")
@Scripts.Render("~/Scripts/buttons.js")
</head>
<body>
<div class="container-fluid okienne">
<div class="row">
<div class="col-sm-2"></div>
<div class="col-sm-8 menu">
<a href="http://dyskret.pl/" target="_blank">
<img src="~/Images/logo.png" class="img-responsive fimg" />
</a>
</div>
<div class="col-sm-2"></div>
</div>
<div class="row">
<div class="col-sm-2"></div>
<div class="col-sm-2 lista">
<ul>
@foreach (var item in Model)
{
<li>@Html.ActionLink(item.Name, "Produkt", new { ProductID = item.ProductID })</li>
}
</ul>
</div>
<div class="col-sm-6 details">
@Html.DisplayFor(m => m.Name)
</div>
<div class="col-sm-2"></div>
</div>
<div class="row">
<div class="col-sm-2"></div>
<div class="col-sm-8 footerProducts">
Text...
</div>
<div class="col-sm-2"></div>
</div>
</div>
</body>
</html>
问题是foreach循环可以完美地工作(我想列出该类别中的所有产品),但是当单击时,我还想在右侧显示它的详细信息,但是我不能,因为模型是IEnumerable <>并且应该简单型号(AMBIT_CMS_MVC.Areas.Admin.Models.Product)。就像我想将“索引”和“详细信息”视图合而为一。我该如何实现?
好的,所以我想出了答案:
将我的视图更改为:
@model AMBIT_CMS_MVC.Models.ProductViewModel
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>DYSKRET - FOLIE OKIENNE</title>
@Styles.Render("~/Content/Site.css")
@Styles.Render("~/Content/bootstrap.css")
@Scripts.Render("~/Scripts/jquery-1.10.2.min.js")
@Scripts.Render("~/Scripts/bootstrap.js")
@Scripts.Render("~/Scripts/buttons.js")
</head>
<body>
<div class="container-fluid okienne">
<div class="row">
<div class="col-sm-2"></div>
<div class="col-sm-8 menu">
<a href="http://dyskret.pl/" target="_blank">
<img src="~/Images/logo.png" class="img-responsive fimg" />
</a>
</div>
<div class="col-sm-2"></div>
</div>
<div class="row">
<div class="col-sm-2"></div>
<div class="col-sm-2 lista">
@Html.Partial("_Lista", Model.Products)
</div>
<div class="col-sm-6 details">
@Html.Partial("_Produkt", Model.ProductDetails)
</div>
<div class="col-sm-2"></div>
</div>
<div class="row">
<div class="col-sm-2"></div>
<div class="col-sm-8 footerProducts">
Text...
</div>
<div class="col-sm-2"></div>
</div>
</div>
</body>
</html>
_Lista部分:
@model IEnumerable<AMBIT_CMS_MVC.Areas.Admin.Models.Product>
<ul>
@foreach (var item in Model)
{
<li>@Html.ActionLink(item.Name, "Produkt", new { ProductID = item.ProductID })</li>
}
</ul>
_Produkt部分:
@model AMBIT_CMS_MVC.Areas.Admin.Models.Product
@Html.DisplayFor(m => m.Name)
@Html.DisplayFor(m => m.Description)
然后将一个类添加到我的模型中-ProductViewModel(添加到使用我的区域模型来与它们一起使用,因为该模型不在区域内):
using AMBIT_CMS_MVC.Areas.Admin.Models;
namespace AMBIT_CMS_MVC.Models
{
public class ProductViewModel
{
public IEnumerable<Product> Products { get; set; }
public Product ProductDetails { get; set; }
}
}
最后将我的控制器更改为:
public ActionResult Produkt(int? ProductID)
{
string domain = Request.Url.Host;
int clientid = (from a in db.Client where a.Domain == domain select a.ID).First();
int categoryID = db.Category.Where(b => b.ClientID == clientid && b.Name == "Okienne").Select(b => b.ID).First();
var ProductViewModel = new ProductViewModel();
ProductViewModel.Products = db.Product.Where(c => c.ClientID == clientid && c.CategoryID == categoryID).ToList();
ProductViewModel.ProductDetails = db.Product.SingleOrDefault(c => c.ClientID == clientid && c.CategoryID == categoryID && c.ProductID == ProductID);
return View(ProductViewModel);
所以这就是我的方法。希望它将帮助下一代开发人员发生相同的错误并面临相同的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句