Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 生成类别产品的列表_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

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;