vista una section renderbody que página plantillas parcial para net método mvc llamado diseño body asp asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-partialview asp.net-mvc-views

asp.net-mvc - una - renderbody razor mvc 5



¿Cómo renderizar una sección en una vista parcial en MVC3? (5)

En un proyecto MVC3, tengo un archivo "_Layout.vbhtml" con este código

<!DOCTYPE html> <html> <head> </head> <body> ... <script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script> @RenderSection("Scripts", false) </body> </html>

Luego, tengo una vista parcial "ValidationScripts.vbhtml" en la carpeta compartida con

@Section Scripts <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.fix.js")"></script> <script src="@Url.Content("~/Scripts/localization/messages_de.js")"></script> End Section

Si llamo a la vista parcial desde una vista como esta ...

@ModelType MvcExample.MyModel @Code ViewData("Title") = "Test" End Code @Html.Partial("ValidationScripts") <h2>Just a Test</h2> ...

la Sección "Scripts" no se representa en la página, y el resultado HTML es

<!DOCTYPE html> <html> <head> </head> <body> ... <script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script> </body> </html>

¿Cómo puedo representar la sección en la vista parcial?



No puede usar secciones en vistas parciales. Puedes buscar ayudantes personalizados como se menciona here .


Si entiendo correctamente, tienes una estructura

  • Layout.cshtml
  • Vista - X
    • PartialView Y (llamado dentro de View-X)

entonces necesitas definir el

@section Script{ .... } en el View-X y NOT PartialView Y ya que View-X tiene su View.Layout configurado en Layout.cshtml


Tuve el mismo problema en la parte superior de los scripts duplicados, así que creé un par de métodos de extensión:

public static class HtmlHelperExtensions { private const string _jSViewDataName = "RenderJavaScript"; private const string _styleViewDataName = "RenderStyle"; public static void AddJavaScript(this HtmlHelper htmlHelper, string scriptURL) { List<string> scriptList = htmlHelper.ViewContext.HttpContext .Items[HtmlHelperExtensions._jSViewDataName] as List<string>; if (scriptList != null) { if (!scriptList.Contains(scriptURL)) { scriptList.Add(scriptURL); } } else { scriptList = new List<string>(); scriptList.Add(scriptURL); htmlHelper.ViewContext.HttpContext .Items.Add(HtmlHelperExtensions._jSViewDataName, scriptList); } } public static MvcHtmlString RenderJavaScripts(this HtmlHelper HtmlHelper) { StringBuilder result = new StringBuilder(); List<string> scriptList = HtmlHelper.ViewContext.HttpContext .Items[HtmlHelperExtensions._jSViewDataName] as List<string>; if (scriptList != null) { foreach (string script in scriptList) { result.AppendLine(string.Format( "<script type=/"text/javascript/" src=/"{0}/"></script>", script)); } } return MvcHtmlString.Create(result.ToString()); } public static void AddStyle(this HtmlHelper htmlHelper, string styleURL) { List<string> styleList = htmlHelper.ViewContext.HttpContext .Items[HtmlHelperExtensions._styleViewDataName] as List<string>; if (styleList != null) { if (!styleList.Contains(styleURL)) { styleList.Add(styleURL); } } else { styleList = new List<string>(); styleList.Add(styleURL); htmlHelper.ViewContext.HttpContext .Items.Add(HtmlHelperExtensions._styleViewDataName, styleList); } } public static MvcHtmlString RenderStyles(this HtmlHelper htmlHelper) { StringBuilder result = new StringBuilder(); List<string> styleList = htmlHelper.ViewContext.HttpContext .Items[HtmlHelperExtensions._styleViewDataName] as List<string>; if (styleList != null) { foreach (string script in styleList) { result.AppendLine(string.Format( "<link href=/"{0}/" rel=/"stylesheet/" type=/"text/css/" />", script)); } } return MvcHtmlString.Create(result.ToString()); } }

En cualquier Vista o Vista parcial o Mostrar / Editar plantilla simplemente agrega lo que necesita:

@{ Html.AddJavaScript("http://cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js"); }

En sus diseños, lo renderiza donde lo desee:

<!DOCTYPE html> <html lang="en"> <head> @Html.RenderStyles() @Html.RenderJavascripts()

El único problema que puede tener es el orden en que se procesan los scripts si llega a ser complejo. Si eso se convierte en un problema, simplemente agregue los scripts al pie de sus vistas / plantillas, y simplemente invierta el orden en el método de extensión antes de representarlos.


todo esto fue una gran información, sin embargo, si mira su código original, la sección se escribe en mayúscula, por lo tanto, no se reconoce.

debería ser @section blahblah no @Section