将类别列表传递给局部视图

时间:2018-01-02 18:04:24

标签: asp.net-mvc

我有一个局部视图,它将显示主要类别的列表,并在每个主要类别下显示其所有子类别。但问题是我不知道如何将此类别列表传递给我的局部视图。请检查下面的代码。我还附上了我的.edmx表格地图,让你有更好的想法。一旦我将它传递给局部视图,我想循环所有类别和子类别以显示它们

pic

[ChildActionOnly]
public PartialViewResult _GuestNav()
{
    using (var db = new TestEntities())
    {
        db.Categories.ToList(); // get list from here

        return PartialView("_GuestNav"); // then pass that list to partial view
    }
}

3 个答案:

答案 0 :(得分:1)

以下是主要行动代码:

public ActionResult Categories()
{
    using (var dbCtx = new DbContext())
    {
        var categories = dbCtx.Categories.Include(x => x.SubCategories).ToList()
        return View(categories); 
    }
}

然后在Categories.cshtml中,您将获得以下代码:

@model IEnumerable<Categories>

<ul>
    @foreach(var category in Model)
    {
        <li>@category.CategoryName
         @if(category.SubCategories.Any())
         {
            Html.RenderPartial("~/Partial/_SubCategory.cshtml", category.SubCategories); 
         }
         </li>
    }
</ul>

最后,您在Category文件夹的Partial文件夹中提供了一个名为_SubCategory.cshtml的部分视图,如下所示:

 @model IEnumerable<SubCategory>
 <ul>
    @foreach(var subCategory in Model)
    {
        <li>@subCategory.SubCategoryName</li>
    }
</ul>

在您的情况下,如果您想将此列表传递到您指定的部分视图,您可以按以下方式执行:

[ChildActionOnly]
public PartialViewResult _GuestNav()
{
    using (var db = new TestEntities())
    {
       var categories = db.Categories.Include(x => x.SubCategories).ToList(); // Added the include if you want to add subcategories as well
        return PartialView("_GuestNav", categories); // then pass that list to partial view
    }
}

答案 1 :(得分:0)

PartialView方法具有接受对象的覆盖。您需要将db.Categories.ToList()调用的结果存储在变量中,并将其传递给方法,如下所示:

 using (var db = new TestEntities())
{
    var cats = db.Categories.Include("SubCategories").ToList(); // get list from here

    return PartialView("_GuestNav", cats); // then pass that list to partial view
}

只需确保您的部分视图需要一个类别列表作为其模型。然后,在视图中,您可以遍历模型并显示子类别。

您还应该研究如何为您的视图使用viewmodel。

编辑

您可能需要使用include语句,因为导航属性通常是延迟加载的。更新了我的答案。

答案 2 :(得分:0)

Yo可以使用模型绑定,将Model或ViewModel作为参数传递,并从局部视图访问它。例如,在_GuestNav操作中:

...
return PartialView("_GuestNav",db.Categories.ToList());

这里有关于如何实现这一目标的link

然后,您可以在视图中绑定模型。例如:

...
@model IEnumerable<Categories>;

有关详细信息,请查看链接中的示例。