我有一个局部视图,它将显示主要类别的列表,并在每个主要类别下显示其所有子类别。但问题是我不知道如何将此类别列表传递给我的局部视图。请检查下面的代码。我还附上了我的.edmx表格地图,让你有更好的想法。一旦我将它传递给局部视图,我想循环所有类别和子类别以显示它们
[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
}
}
答案 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>;
有关详细信息,请查看链接中的示例。