在局部视图中添加局部视图

时间:2015-06-11 09:36:35

标签: jquery asp.net-mvc recursion partial-views

我目前正在使用MVC4。在我的数据库中,我有一个名为Categories的表,它与ParentCategory具有递归关系。现在我希望用户能够选择类别,子类别,子子类别......等等。 如何通过另一个的结果动态添加部分视图? 显示和评估单个部分视图是没有问题的。 我现在拥有的是: 视图:

<script> 
$(document).ready(function () {
   $('#CategoryDropDown').change(function () {
   var CategoryId = $("#CategoryDropDown").val();
   $("#CascadingCategories").load('@(Url.Action("CategoryIndexChanged", "Database", null, Request.Url.Scheme))?CategoryId=' + CategoryId);
   });
});
</script>

    <!-- random markup -->

<div id="CascadingCategories">
 <p>
   <span style="width:150px; display:inline-block; line-height:42px;">Category:</span>
    @{Html.RenderPartial("_PartialCascadingCategoryDropDown", Model);}   
</div>

部分视图:

@Html.DropDownList("CategoryDropDown", new SelectList(Model.Categories, "CategoryId", "CategoryDescription"), "Select a Category", new { @class = "form-control" })

控制器:

public ActionResult CategoryIndexChanged(int? CategoryId)
{
    SearchModel model = new SearchModel();
    model.GetCategoryDropDownItems(CategoryId ?? 0);
    return PartialView("__PartialCascadingCategoryDropDown", model);
}

我的想法是现在将部分视图称为递归,如:

<!-- this will ofc result in an infinite loop-->@{//Html.RenderPartial("_PartialCascadingCategoryDropDown", Model);}}

,但只有在先前列表发生变化时才会出现。

一些想法和问题:

  • DropDownList将始终具有相同的名称,这将使其难以读出
  • 将javascript添加到局部视图
  • 并非最佳做法
  • 因为我想多年保持灵活性,所以我不喜欢简单地为RootCategoryDropDown,FirstLevelCategoryDropDown,SecondLevelCategoryDropDown等添加5或10个字段的方法。

对我有什么帮助:

  • 可以在视图中检查所选类别是否包含子项
  • 任何采用完全不同方法的想法
  • 关于如何动态添加(不加载)局部视图的任何想法。
提前谢谢!

0 个答案:

没有答案