微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态分类明智子类别的下拉列表

如何解决动态分类明智子类别的下拉列表

我想创建一个动态的,与产品相关的独立类别明智的子类别的下拉列表,并分别显示产品。我已经创建了一个动态的类别化产品。但我不明白如何动态创建子类别,这是明智的选择。我已经在类别,子类别和产品模型之间建立了联系。

这是我的代码

型号

//Product's model

 public class Shop
    {
        public int Id { get; set; }

        [required]
        [display(Name = "product name")]
        public String Name { get; set; }
        [required]
        public int Price { get; set; }


        public String Image { get; set; }
        public String Image1 { get; set; }

        public List<Photo1> Photos { get; set; }

        [required]
        public int Quantity { get; set; }

        [required]
        public bool IsAvailable { get; set; }

        [display(Name = "Category")]

        public int? CategoryTypeId { get; set; }

        [ForeignKey("CategoryTypeId")]
        public Category Category { get; set; }

        [display(Name = "SubCategory")]

        public int? SubCategoryTypeId { get; set; }

        [ForeignKey("SubCategoryTypeId")]
        public SubCategory SubCategory { get; set; }
    }


//SubCategory Model

  public class SubCategory
    {
        public int Id { get; set; }

        [required]
        [display(Name = "SubCategory Name")]
        public string SubCategoryName { get; set; }

        public int CategoryID { get; set; }

        [JsonIgnore]
        public Category Category { get; set; }
    }

//Category Model

 public class Category
    {
        public int Id { get; set; }

        [required]
        [display(Name = "Category Name")]
        public string CategoryName { get; set; }

        public ICollection<SubCategory> SubCategories { get; set; }
    }

组件

  public class CategoryWiseMenu:ViewComponent
    {
       private readonly ApplicationDbContext _db;

        public CategoryWiseMenu(ApplicationDbContext db)
        {
            _db = db;
        }

        public IViewComponentResult Invoke()
        {
            var c = _db.Category.OrderBy(p => p.CategoryName);
            return View(c);
        }
    }

Default.cshtml



<ul class="navbar-nav flex-grow-1">


    @foreach (var category in Model)
    {
        <li class="nav-item text-dark">
            <a asp-controller="ShopShow" asp-action="ListCategories"
               asp-route-cate="@category.CategoryName" class="nav-link text-dark">@category.CategoryName</a>
        </li>
    }
    
</ul>

ShopShow Controller及其视图

//Controller

  public IActionResult ListCategories(string cate)
        {
            var c = _db.Shop.Where(x => x.Category.CategoryName == cate).ToList();
            ViewBag.t = c;
            return View();
        }



  //....................//
 //ListCagories.cshtml//
//..................//


@model DigitalShop.Models.Shop



<h1 class="text-center text-danger">Buy Now!!</h1>
<br /><br />
<div class="row">

    @foreach (var laptop in ViewBag.t)
    {
        <div class="col-4 ml-5">
            <div class="card mb-4">
                <div class="card-header">
                    <h4 class="my-4 font-weight-normal">
                        <label style="font-size:23px; color:black;text-align:center">@laptop.Name</label>
                    </h4>
                </div>
                <img src="~/@laptop.Image" alt="Card Image" class="card-img-top" style="height:200px;" />

                @*@if (laptop.Photos != null && laptop.Photos.Count != 0)
                    {
                        <img src="~/@laptop.Photos[0].Image" alt="Card Image" class="card-img-top" style="height:200px;" />
                    }*@

                @*<video src="~/@laptop.Image1" alt="Card Image" class="card-img-top" controls height="300px" loop />*@

                <div class="card-header">
                    <div class="d-flex justify-content-between align-items-center">
                        <div class="btn-group">
                            <label style="font-size:20px;color:darkblue"><b>Price:@laptop.Price</b></label>
                        </div>


                        <a asp-action="Details" asp-controller="ShopShow" asp-route-id="@laptop.Id" class="btn btn-primary pull-right btn-outline-light">Details</a>
                    </div>
                </div>
            </div>
        </div>

    }
</div>



输出

enter image description here

我已经在布局页面中使用了@(await Component.InvokeAsync("CategoryWiseMenu"))。在上面的输出中,我成功创建了一个动态类别明智的产品。但我想要动态地将与产品相关的类别分开分类明智的子类别的下拉列表。有什么解决方案。

解决方法

从数据库中获取带有categoryName的商店,然后从商店中获取子类别。

  //pass CategoryName 

     public IActionResult ListSubCategories(string cate)
            {
                //get shops with subcategory related to categoryName
                var c = _db.Shop.Include(c => c.Category.Where(x => x.Category.CategoryName == 
                cate)).Include(c => c.SubCategory).ToList();
                List<SelectListItem> SubCategories= new List<SelectListItem>();
                //get subcategories from shops
                for(int i=0;i<c.Count();i++){
                   s.Add(new SelectListItem { Value = c[i].SubCategory.Id,Text = c[i].SubCategory.SubCategoryName  });
                }
                ViewBag.SubCategories = SubCategories;
                return View();
            }

查看:

@model Shop
    @Html.DropDownListFor(m => m.SubCategoryTypeId,(IEnumerable<SelectListItem>)ViewBag.SubCategories,"select")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。