我正在尝试构建一个导航系统,用户可以通过该系统导航类别/子类别结构,然后允许用户添加新的。
这是我的控制器...
public ActionResult ManageCategories()
{
var categoryService = new CategoryService(_unitOfWork);
CategoryListViewModel model = categoryService.GetCategories(null);
return View("ManageCategories", model);
}
public PartialViewResult GetCategories(int? parentCategoryId)
{
var categoryService = new CategoryService(_unitOfWork);
CategoryListViewModel model = categoryService.GetCategories(parentCategoryId);
return PartialView("GetCategories", model);
}
[HttpPost]
public ActionResult AddNewCategory(string newCategoryName, int? parentCategoryId)
{
...code to add new category to database...
// just redirect for now...
return RedirectToAction("ManageCategories", parentCategoryId);
}
这是我的(简化)视图...
@model CategoryListViewModel
<ul id="category-explorer">
@Html.Action("GetCategories", new { parentCategoryId = Model.ParentCategoryId })
</ul>
这是我的部分视图,仅显示给定父类别的子类别列表...
@model CategoryListViewModel
@{
AjaxOptions ajaxOpts = new AjaxOptions
{
UpdateTargetId = "category-explorer",
};
}
@foreach(Category category in Model.Categories)
{
<li>@Ajax.ActionLink(@category.Name, "GetCategories", new {parentCategoryId = category.CategoryId}, ajaxOpts)</li>
}
null 的 parentCategoryId 表示该类别是顶级类别。在我的局部视图中,我使用 ajax 再次调用相同的局部视图,但将所选类别作为 parentCategoryId 传递,因此它是一个递归结构。
我的问题是我的 ManageCategories 视图如何获得用户嵌套的 parentCategoryId 的最终值?我的主视图上有一个表单,需要使用此值,以便它可以适当地调用“AddCategory”。
我认为我设置 ajax 和视图的方式是正确的;只是有点难过如何干净地实现这一点,即不求助于存储静态变量。