1. RenderBody En el motor Razor, no hay una "página maestra", sino que se coloca una página llamada "layout" (_Layout.cshtml) en la carpeta de vista compartida. En esta página, verás una afirmación en la etiqueta: @RenderBody() De hecho, funciona de forma similar al control del servidor en la página maestra: cuando se crea una vista basada en esta página de diseño, el contenido de la vista se fusiona con la página de maquetación y el contenido de la vista recién creada se renderiza entre las etiquetas mediante el método @RenderBody() de la página de diseño. Este método no requiere parámetros y solo puede aparecer una vez. 2. RenderPage Como puedes imaginar por el nombre, este método consiste en presentar una página. Por ejemplo, el encabezado fijo en una página web puede colocarse por separado en un archivo de vista compartida, y luego llamarse en este método en la página de diseño, de la siguiente manera: @RenderPage("~/Vistas/Compartido/_Header.cshtml") Con parámetros @RenderPage("~/Views/Shared/_Header.cshtml",new{parm="my",parm2="you") Llama a la página para obtener los parámetros: Haz que los parámetros pasen por RenderPage(). @PageData["param"] 3. RenderSection La página de diseño también tiene el concepto de sección, es decir, si una sección está definida en una plantilla de vista, puede presentarse por separado de la siguiente manera: @RenderPage("~/Vistas/Compartido/_Header.cshtml") @RenderBody()
//模板里添加了一个节 @RenderSection ("cabeza") Por supuesto, también define la sección en la vista, de lo contrario ocurrirá una excepción: @section cabeza{
//do
} Para evitar excepciones por secciones faltantes, puedes dar a RenderSection() un segundo argumento: @RenderSection("Submenú", falso) o @if (IsSectionDefined("Submenú"))
{ @RenderSection("Submenú", falso)
} si no,
{ <p>¡La sección de Submenú no está definida!</p>
}
4.@Html.Partial Partial crea su propia instancia de TextWriter cada vez y almacena el contenido en caché en memoria. Finalmente, envía toda la salida del escritor a un objeto MvcString La mayoría de las veces, usaremos @{ html.RenderPartial("details"); en lugar de @Html. Parcial La diferencia entre RenderPage() y RenderPartial(). Las llamadas a RenderPage() solo pueden usarlo para pasar datos más allá de ellos. RenderPartial() puede usar datos de vista, modelo y otros datos. La diferencia entre Html.RenderPartial y Html.RenderAction Html.RenderPartial es adecuado para UserControl repetidos y solo necesita usarse para renderizar contenido a través de modelos o para UserControls para anuncios. Html.RenderAction llamará primero al método de Acción del Controlador; si este UserControl necesita obtener datos de la base de datos para renderizar (leer la base de datos a través de la Acción), este método es más adecuado para este momento. 5.Html.Parcial ("MyView") Devuelve un flujo de intento como una cadena MvcHtmlString, siguiendo las reglas estándar de enrutamiento. Renderiza la vista "MyView" en una cadena MvcHtml. Sigue las reglas estándar para la búsqueda de vistas (es decir, revisar el directorio actual y luego comprobar el directorio compartido). Html.RenderPartial("MyView")
Similar a Html.Partial(), la diferencia es que se escribe directamente en la página sin caché. Hace lo mismo que Html.Partial(), excepto que escribe su salida directamente en el flujo de respuesta. Esto es más eficiente, porque el contenido de la vista no está almacenado en memoria en búfer. Sin embargo, como el método no devuelve ninguna salida, @Html.RenderPartial("MyView") no funcionará. Tienes que envolver la llamada en un bloque de código: @{Html.RenderPartial("MyView"); }. RenderPage("MyView.cshtml")
Devuelve una vista especial con rutas, nombres de archivos, etc., y genera directamente como Heml.RenderPartial() sin caché. Las variables del modelo pueden ser pasadas. Renderiza la vista especificada (identificada por el nombre de ruta y archivo en lugar de por el nombre de la vista) directamente en el flujo de respuesta, como Html.RenderPartial(). Puedes aportar cualquier modelo que quieras a la vista incluyéndolo como segundo parámetro RenderPage("MyView.cshtml",MyModel)
Prefiero
@RenderPage("_LayoutHeader.cshtml")Cambio @{Html.RenderPartial("_LayoutHeader"); }Solo porque la sintaxis es más fácil y más legible. Aparte de eso, no parece haber diferencias en cuanto a funcionalidades.
|