14
Layouts y vistas parciales Danae Aguilar Guzmán MCT, MS, MCTS, MCP [email protected]

ASP.NET MVC - layouts y vistas parciales

Embed Size (px)

Citation preview

Page 1: ASP.NET MVC - layouts y vistas parciales

Layouts y vistas parciales

Danae Aguilar Guzmán MCT, MS, MCTS, MCP

[email protected]

Page 2: ASP.NET MVC - layouts y vistas parciales

Layout

Las vistas de layout nos permiten reusar la estructura principal de nuestras páginas

Mantienen consistente la estructura de las páginas

Definen un template común para el sitio o una parte de el.

El template define donde las páginas hijas insertarán su contenido. @RenderBody()

Page 3: ASP.NET MVC - layouts y vistas parciales

Layout

1. Definiendo un layout:

@RenderBody indica donde se agregará el contenido de las páginas hijas

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> @RenderBody()

Page 4: ASP.NET MVC - layouts y vistas parciales

Layout

2. Usando el layout:

En las páginas hijas especificamos cual es el template padre. Layout

Si no especificamos se tomará el que esté en _ViewStart.cshtml.

Para quitar un template ponemos el valor de Layout en null.

@{ Layout = "~/Views/Shared/SiteLayout.cshtml"; ViewBag.Title = "Ejemplo layout"; } <p>Este es un ejemplo</p>

Page 5: ASP.NET MVC - layouts y vistas parciales

Layout

Se puede especificar mas de un placeholder en el template:

En las páginas hijas, ponemos el contenido:

<body> <h1>@ViewBag.Title</h1> <div id="main-content">@RenderBody()</div> <footer>@RenderSection("Footer")</footer> </body>

@section Footer { Este es el <strong>pie</strong> de página. }

Page 6: ASP.NET MVC - layouts y vistas parciales

Layout

Se puede definir los placeholders comoopcionales:

Y poner algo si es que los hijos no lo hacen:

@RenderSection("Footer", required: false)

<footer> @if (IsSectionDefined("Footer")) { RenderSection("Footer"); } else { <span>Este es el pie por defecto.</span> } </footer>

Page 7: ASP.NET MVC - layouts y vistas parciales

Layout

ViewStart

Se asigna el layout por defecto en _ViewStart.cshtml:

Puede aplicarse por folder o por página, creando este archivo en un folder específico o en el folder shared.

Asignar null para limpiar el layout

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

Page 8: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

Permiten reutilizar contenido.

1. Retornar una vista parcial PartialView

2. Crear la vista como partial view:

public ActionResult Mensaje() { ViewBag.Message = "Una vista parcial."; return PartialView(); }

Page 9: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

3. Definir el contenido de la vista parcial:

Considerar que:

La vista parcial no usa un layout

La vista principal deberá especificar cual es el layout.

<h2>@ViewBag.Mensaje</h2>

Page 10: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

4.1. Podemos cargar la vista parcial con AJAX, usando el método load de JQuery:

<div id="resultado"></div> @section scripts { <script type="text/javascript"> $(function () { $('#resultado').load('/home/mensaje'); }); </script>

}

Lo invocamos para el elementodonde se pondrá el contenido(por ejemplo un div)

Le pasamos el URI de el controller y acción que retorna la vista parcial

Page 11: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

4.2. Podemos pasarle datos:

Una vista parcial puede ser tambiénfuertemente tipada

También podríamos pasarle datos en el query string

$(function () { $('#resultado').load('/home/mensaje', { nombre: "Juanito2" }); });

Page 12: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

5.1. Podemos agregarla usando @Html.Partialo Html.RenderPartial:

@if (true) { Html.RenderPartial("~/Views/Home/Producto.cshtml"); } @Html.Partial("~/Views/Home/_Producto.cshtml", producto);

Page 13: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

6.1. Podemos agregarla usandoAjax.ActionLink:

Debemos usar jQuery y jquery.unobtrusive-ajax

<div id="divMessage">aqui se cargará</div> @Ajax.ActionLink("Refresh new", "MiAccion", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divMessage", InsertionMode = InsertionMode.Replace })

Page 14: ASP.NET MVC - layouts y vistas parciales

Layout

Vistas Parciales

6.2. Podemos pasarle datos usandoAjax.ActionLink:

@Ajax.ActionLink("Click aqui", "ObtenerProducto", /* accion */ "Producto", /* controller */ new { codigoProducto = Model.codigo }, /* datos */ new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "divProducto" })