منو و زیر منو در MVC

12/3/2016 MVC
3526

گاهی توی پروژه نیاز هست تا منو   وزیر منو از بانک اطلاعاتی خوانده شود و در صفحه نمایش داده شود، اگر قرار است این منو در تمام پروژه نمایش داده شود بهتر است به صورت Partial  نمایش داده شود.

این مطلب را از این لینک اقتباس گرفته شده است.

 

میخواهیم Category و SubCategory  را در یک لیست تقریبا درختی نمایش دهیم برا ی این کار Model به این صورت خواهد بود:

 public class ProductCategory
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public bool Active { get; set; }
        public virtual IList<ProductTypeSubCategory> ProductSubTypeCategoris { get; set; }
    }

و برای زیر منو یا subcategory

  public class ProductTypeSubCategory
    {
        public int Id { get; set; }
        public string PersianName { get; set; }
        public string EnglishName { get; set; }
        public string Description { get; set; }
        public int ProductCategoryId { get; set; }
        public virtual ProductCategory ProductCategoris { get; set; }
    }

و برای ActionResult  که یک پارشیال ویوو را برمیگرداند به این صورت نوشتم 

  public ActionResult _ProductCategory()
        {
            var PC = _db.ProductCategoris.Include("ProductSubTypeCategoris").Where(x=>x.Active).ToList();
            return PartialView("_ProductCategory",PC);
        }

 ”چیزی که در اینجا جالب بود در زمانی از Include  استفاده میکنیم ، مثلا اینجا 

var productSubCategoris = db.ProductSubCategoris.Include(p => p.ProductCategoris);

به راحتی عبارات لامبدا قابل استفاده است اما برای ActionResult  که در بالا جهت به دست اوردن منو و زیر منو نوشتیم در قسمت include  حتما لازم است  string  استفاده کنیم 

و در پارشیال ویوو داریم 

@model IEnumerable<MyProject.Models.ProductCategory>
<h2>دسته بندی ها</h2>
@if (Model != null)
{
    <div class="panel-group category-products" id="accordian">
        @foreach (var ProdcutCategory in Model)
        {
        <!--category-productsr-->
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h4 class="panel-title">
                        <a data-toggle="collapse" data-parent="#accordian" href="#sportswear">
                            <span class="badge pull-right"><i class="fa fa-plus"></i></span>
                            @Html.ActionLink(ProdcutCategory.Name, "Details", "Menu", new { id = ProdcutCategory.Id })
                            
                        </a>
                    </h4>
                </div>
                <div id="sportswear" class="panel-collapse collapse">
                    <div class="panel-body">
                        <ul>
                            @foreach (var submenu in ProdcutCategory.ProductSubTypeCategoris)
                            {
                                @Html.ActionLink(submenu.PersianName, "Details", "SubMenu", new { id = submenu.Id },null) 
                            
                               
                            }
                        </ul>
                    </div>
                </div>
            </div>
        }
</div>