6

Tengo una vista parcial e int, no hay rastro de herencia de ningún diseño. Pero cada vez que quiero usarlo (renderizarlo) dentro de una vista, el diseño se repite una vez para la vista y una vez para la vista parcial. This post sugiere crear un diseño vacío. Pero creo que esta es la solución. ¿Hay alguna forma de dejar de cargar el diseño (diseño principal) para vistas parciales? No entiendo por qué cuando no hay un código para usar el diseño maestro, ¿por qué debería cargarse? Es como crear una página en ASP.NET y ver que hereda de una página maestra sin tener la directiva <%@ Master ....La vista parcial hereda del diseño principal

Ésta es mi visión parcial:

@* 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='[email protected]'>@padding.PadRight(level, '-') @childCategory.Title</option> 
      @RenderChildCategories(categories, level, childCategory.Id); 
    } 
    level--; 
} 
+0

u puede mostrar la primera línea de la página parcial y su método de acción del controlador? –

Respuesta

13

Pude reproducir este problema al renderizar páginas parciales a través de ajax cal ls. El

return View("partialpage") 

siempre acompaña con el diseño. He anulado este comportamiento mediante una llamada explícita

return PartialView("partialpage") 
+0

Buena práctica. No sabía que PartialView es uno de los tipos ActionResult. Pero lo que haces cuando no trabajas con ajax y quieres construir tu página se basa en armar algunas vistas parciales (algo así como un tablero de instrumentos). ¿Qué método? –

+1

uso RenderPartial o RenderAction dependiendo de la disponibilidad del modelo –

9

La disposición que podría venir de su ~/Views/_ViewStart.cshtml

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

Usted podría intentar anular esto en su vista parcial como:

@{ 
    Layout = null; 
} 
+0

Esto funcionó para mí. Gracias. ¿Pero no es extraño? En WebForms es como decir siempre que "esta página no tiene una página maestra", o "este control de usuario no tiene una página maestra". Quiero decir, parece que el valor predeterminado debería ser 'Layout = null;' y no debería haber necesidad de decirlo explícitamente. –

+0

WebForms view engine usó extensiones de archivos diferentes (.ascx para parciales, .aspx para páginas). Razor, por otro lado, usa la misma extensión para todo, así que esa podría ser la razón (aunque no está 100% seguro). Por cierto, no pude reproducir tu problema. ¿Cómo llamas tu parcial? Intenté con @ Html.Partial ("_ Foo") y simplemente funcionó. No es necesario configurar Layout a null. –

+1

He usado '@ Html.Action (" PartialViewControllerAction ")'. La documentación del método dice que devuelve el resultado representado de la ejecución de vista parcial. –

Cuestiones relacionadas