Asp.net 生成类别产品的列表
我正在开发一个商店应用程序,我需要显示每个类别的产品。问题是每个产品都是从存储在表中的产品模板创建的,每个模板都与一个类别相关。以下是产品型号:Asp.net 生成类别产品的列表,asp.net,asp.net-mvc,entity-framework,Asp.net,Asp.net Mvc,Entity Framework,我正在开发一个商店应用程序,我需要显示每个类别的产品。问题是每个产品都是从存储在表中的产品模板创建的,每个模板都与一个类别相关。以下是产品型号: namespace fardashahr.Models { [Table("Product")] public class ProductModel { public ProductModel() { if (Specs == null) {
namespace fardashahr.Models
{
[Table("Product")]
public class ProductModel
{
public ProductModel()
{
if (Specs == null)
{
Specs = new Dictionary<string, SpecItemsModel>();
}
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public int ProductTemplateId { get; set; }
[Required]
public bool IsPublished { get; set; }
[Required]
public bool InStock { get; set; }
[Range(95, 110)]
public float SyncRate { get; set; }
public DateTime? ProductionDate { get; set; }
[Required]
public DateTime RegisterationDate { get; set; }
public string ImageName { get; set; }
public IEnumerable<string> GalleryImages { get; set; }
[NotMapped]
public Dictionary<string, SpecItemsModel> Specs { get; set; }
[ForeignKey("ProductTemplateId")]
public virtual ProductTemplateModel ProductTemplate { get; set; }
[ForeignKey("ManufacturerId")]
public virtual CodingItemModel Manufacturer { get; set; }
[ForeignKey("BrandId")]
public virtual CodingItemModel Brand { get; set; }
[ForeignKey("ModelId")]
public virtual CodingItemModel Model { get; set; }
[ForeignKey("SeriesId")]
public virtual CodingItemModel Series { get; set; }
}
}
控制器是:
namespace fardashahr.Controllers
{
public class ProductsController : Controller
{
// GET: Products
public ActionResult Index()
{
return RedirectToAction("Index", "Home");
}
public ActionResult Category(string name)
{
//declare a list of products
List<ProductModel> productList;
using(MainModel db = new MainModel())
{
//get category id
CategoryModel category = db.Categories.Where(x => x.CategorytUrl == name).FirstOrDefault();
int catId = category.Id;
//initialize the list
productList = db.Products.Where(x => x. == catId).ToList();
}
}
}
}
namespace fardashahr.Controllers
{
公共类产品控制器:控制器
{
//获取:产品
公共行动结果索引()
{
返回重定向到操作(“索引”、“主页”);
}
公共操作结果类别(字符串名称)
{
//申报产品清单
列出产品清单;
使用(MainModel db=newmainmodel())
{
//获取类别id
CategoryModel category=db.Categories.Where(x=>x.CategorytUrl==name.FirstOrDefault();
int catId=category.Id;
//初始化列表
productList=db.Products.Where(x=>x.==catId.ToList();
}
}
}
}
最后,我想知道的是如何初始化产品列表。在您的模型中,您添加了
virtual
关键字,这表明导航属性将自动加载,而无需LINQ lambda。include()
表达式
因此,您可以立即访问导航属性并像这样加载列表
productList = db.Products.Where(x => x.ProductTemplate.CategoryId == catId).ToList();
string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.Name;
string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.CategorytUrl;
如果您想知道什么是导航属性,以下是导航属性的示例
public virtual ProductTemplateModel ProductTemplate{get;set;}
和public virtual CategoryModel Category{get;set;}
非常感谢Jerdino。您能否解释如何从导航属性获取属性,例如在viewbag中使用它的类别名称?@Arya例如,如果您有一个productModel对象,您可以执行string categoryName=productModel.ProductTemplate.category.CategoryURL代码>。我更新了答案。是否将显示类别名称的控制器包括在内?整个问题的原因是我想为每个类别创建一个页面,并显示该类别的产品。我认为你提到的控制器包括在问题中,如果没有,请解释我必须包括哪些控制器。我有点困惑。
productList = db.Products.Where(x => x.ProductTemplate.CategoryId == catId).ToList();
string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.Name;
string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.CategorytUrl;