asp.net - viewcomponent - view components vs partial views
¿Cómo agregar una secuencia de comandos en una vista parcial en MVC4? (7)
Este es el código que tengo en mi vista parcial
@model Contoso.MvcApplication.Models.Exercises.AbsoluteArithmetic
@using(Html.BeginForm())
{
<div>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number1</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">+</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number2</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">=</span>
<span>
@Html.EditorFor(model => model.Result)
@Html.ValidationMessageFor(model => model.Result)
</span>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Tenga en cuenta que en la parte inferior de mi código, tengo una @section
, y me di cuenta de que no se está ejecutando si establezco un punto de interrupción allí. Si muevo esa línea en _Layout.cshtml, funciona bien, pero esa no es la idea.
¿Cómo puedo decirle a MVC4 en una vista de maquinilla de afeitar parcial que quiero agregar esa biblioteca?
Esta página proporcionó una solución completa a esta pregunta: Uso de secciones en las plantillas Editor / Display
TL; DR: Simplemente agregue el paquete de Forloop.HtmlHelpers nuget https://www.nuget.org/packages/Forloop.HtmlHelpers/ a su proyecto para permitirle ejecutar Javascript desde Razor Partial Views and Templates en ASP.NET MVC. Personalmente he usado esto con mi proyecto MVC 5.
Esto funcionó para mí y me permitió colocar JavaScript y HTML para una vista parcial en el mismo archivo para facilitar la lectura
En Vista, que usa Vista parcial llamada " _MyPartialView.cshtml "
<div>
@Html.Partial("_MyPartialView",< model for partial view>,
new ViewDataDictionary { { "Region", "HTMLSection" } } })
</div>
@section scripts{
@Html.Partial("_MyPartialView",<model for partial view>,
new ViewDataDictionary { { "Region", "ScriptSection" } })
}
En el archivo de vista parcial
@model SomeType
@{
var region = ViewData["Region"] as string;
}
@if (region == "HTMLSection")
{
}
@if (region == "ScriptSection")
{
<script type="text/javascript">
</script">
}
No existe una solución común para este problema, pero puede hacer de la siguiente manera simple:
1) Puede crear un conjunto de métodos de extensión de la siguiente manera:
https://.com/a/6671766/5208058
2) Simplemente mueva sus códigos de JavaScript a una vista parcial separada y en su vista principal, renderice 2 vistas parciales. Uno para la vista parcial principal y el otro para sus scripts como el siguiente:
{
// markup and razor code for Main View here
@Html.Partial("Main_PartialView")
}
@section Scripts
{
@Html.Partial("JavaScript_PartialView")
}
Espero eso ayude.
No puede representar secciones de diseño desde un parcial. Mueva la definición de la sección a la página o diseño principal.
Puede agregar la secuencia de comandos directamente al final de la vista parcial html, sin la sección de secuencia de comandos (porque la sección de secuencia de comandos no se representa en vistas parciales)
<script language="javascript">
// Your scripts here
// ....
</script>
Puede usar @Scripts.Render("~/Scripts/my-script.js")
para archivos .js y @Styles.Render("~/Content/my-Stylesheet.css")
para archivos css.
NB: también funciona para un paquete particular Más detalles - '' http://www.asp.net/mvc/overview/performance/bundling-and-minification ''
funciona en cualquier subpágina de la maquinilla de afeitar, incluidas las vistas parciales. para más información google para el uso de estos ayudantes
Vea mi respuesta Cómo renderizar una sección en una vista parcial , que le permite definir secuencias de comandos y estilos en cualquier vista / vista parcial. También se ocupa de duplicar incluye.
Mi opinión personal es que las secciones no son una buena solución para los estilos y Javascript incluye .