部分视图继承自主布局

时间:2011-07-01 10:05:13

标签: asp.net-mvc asp.net-mvc-3 layout master-pages partial-views

我有一个局部视图并且在其中,没有来自任何布局的任何继承的痕迹。但是每当我想在视图中使用它(渲染它)时,布局会为视图重复一次,而对于局部视图则重复一次。 This post建议创建一个空布局。但我认为这是解决方法。无论如何都要停止为部分视图加载布局(主布局)。我不明白,为什么当没有代码使用主布局时,为什么要加载它。这就像在ASP.NET中创建一个页面,看到它从主页面继承而没有<%@ Master ...指令。

这是我的部分观点:

@* Recursive category rendering *@
@using Backend.Models;

@{
    List<Category> categories = new ThoughtResultsEntities().Categories.ToList();
    int level = 1;
 }

 @RenderCategoriesDropDown(categories, level)

 @helper RenderCategoriesDropDown(List<Category> categories, int level)
 {
     List<Category> rootCategories = categories.Where(c => c.ParentId == null).ToList();
     <select id='categoriesList' name='categoriesList'>
     @foreach (Category rootCategory in rootCategories)
     {
         <option value='@rootCategory.Id' class='level-1'>@rootCategory.Title</option>
         @RenderChildCategories(categories, level, rootCategory.Id);
     }
     </select>
 }

 @helper RenderChildCategories(List<Category> categories, int level, int  parentCategoryId)
 {
     string padding = string.Empty;
     level++;
     List<Category> childCategories = categories.Where(c => c.ParentId == parentCategoryId).ToList();
     foreach (Category childCategory in childCategories)
     {
          <option value='@childCategory.Id' class='level-@level'>@padding.PadRight(level, '-') @childCategory.Title</option>
          @RenderChildCategories(categories, level, childCategory.Id);
     }
     level--;
 }

2 个答案:

答案 0 :(得分:16)

通过ajax调用渲染部分页面时,我能够重现此问题。

return View("partialpage")   

总会伴随布局。我通过显式调用

覆盖了这种行为
return PartialView("partialpage")  

答案 1 :(得分:10)

布局可能来自您的~/Views/_ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

您可以尝试在部分视图中覆盖此内容,例如:

@{
    Layout = null;
}