Частичное представление наследуется от основного макета - PullRequest
7 голосов
/ 01 июля 2011

У меня есть частичное представление, и в нем нет никаких следов наследования от любого макета. Но всякий раз, когда я хочу использовать его (визуализировать) внутри представления, макет повторяется один раз для представления и один раз для частичного представления. В этом посте предлагается создать пустой макет. Но я думаю, что это обходной путь. Есть ли в любом случае остановить загрузку макета (мастер-макета) для частичных видов. Я не понимаю, почему, когда нет кода для использования основного макета, почему он должен быть загружен. Это все равно что создать страницу в 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 ]

16 голосов
/ 01 июля 2011

Мне удалось воспроизвести эту проблему при рендеринге частичных страниц с помощью вызовов ajax.

return View("partialpage")   

всегда будет сопровождать макет. Я переопределил это поведение, явно вызвав

return PartialView("partialpage")  
10 голосов
/ 01 июля 2011

Макет может исходить от вашего ~/Views/_ViewStart.cshtml

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

Вы можете попробовать переопределить это в частичном представлении, например:

@{
    Layout = null;
}
...