tag password net mvc for asp asp.net-mvc asp.net-mvc-4 bundle asp.net-optimization

password - ¿Cómo agrupar recursos para las áreas ASP.NET MVC?



select asp-for asp-items (2)

¿Su pregunta implica que tiene scripts y carpetas CSS separados para cada área? Esto no es convencional (aunque perfectamente plausible). ¿O tal vez tiene una sola carpeta de scripts en el nivel de ruta y la ha dividido en subcarpetas para cada Área? De cualquier manera, tendrá que hacer algo ligeramente diferente para obtener paquetes específicos de Área.

Las aplicaciones MVC4 vienen con una clase BundleConfig estática que vive en la carpeta App_Start. El paquete se inicializa desde Global.asax. Si no está trabajando con un proyecto MVC4, actualice o simplemente inicie un proyecto MVC4 listo para usar para observar el diseño de estos archivos.

Los paquetes se configuran simplemente al declarar una ruta virtual (desde la que se puede hacer referencia al paquete) y luego especificar los archivos que desea agrupar. Los archivos que se incluirán se pueden especificar al enumerar explícitamente el nombre del archivo, la coincidencia de caracteres del nombre de archivo o al especificar un directorio en el que se deben incluir todos los archivos.

Para empezar, solo usaría este BundleConfig global para especificar paquetes para todas sus áreas. Si esto no se escala para usted o se vuelve difícil de manejar, siempre puede romperlo más tarde.

Especifique qué archivos deben incluirse. Debería prefijar la ruta virtual del paquete con el Área para la que está. Entonces será fácil hacer referencia usando el nombre del Área desde sus vistas, muy probablemente su _Layout.cshtml .

Por ejemplo, aquí tenemos dos áreas, cada una con guiones distintos: usuario y grupo .

App_Start / BundleConfig.cs

public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { /// Bundle For User Area bundles.Add(new ScriptBundle("~/user/bundles/scripts").Include( "~/Scripts/User/myuserscript1.js", "~/Scripts/User/myuserscript2.js")); /// Bundle For Group Area bundles.Add(new ScriptBundle("~/group/bundles/scripts").Include( "~/Scripts/Group/mygroupscript1.js", "~/Scripts/Group/mygroupscript2.js")); } }

Luego puede usar Scripts.Render() en su _Layout.cshtml principal para procesar el paquete de Área correcto, dependiendo de qué área esté viendo el usuario actualmente. Para hacer esto, primero necesita obtener el Área actual así:

Views / Shared / _Layout.cshtml:

<head> @{ var currentArea = (ViewContext.RouteData.DataTokens["area"] ?? String.Empty).ToString().ToLower(); } @Scripts.Render("~/" + currentArea + "/bundles/scripts") </head>

EDITAR

Si realmente desea administrar su paquete desde su Área, entonces el registro de Área sería un buen lugar para hacerlo. La propiedad estática de BundleTable a la que se hace referencia en BundleConfig es global, por lo que se puede hacer referencia a ella en cualquier lugar. Este código compila pero no lo he probado. Es para un Área llamada Prueba:

Areas / Test / TestAreaRegistration.cs

public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Test_default", "Test/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } ); BundleTable.Bundles.Add(new Bundle("~/test/bundles/scripts").Include( "~/Areas/Test/Scripts/jquery.js")); }

¿Cómo haría la agrupación de recursos para las áreas de asp.net mvc? ¿Está esto regulado por el marco ASP.NET MVC al igual que el AreaRegistration de AreaRegistration para las rutas?

Podría hacer una clase BundleConfig dentro del área y llamar a esto desde el BundleConfig global dentro de la carpeta App_Start pero esto no me hace sentir bien.

No puedo encontrar ninguna información sobre este tema. Cualquier ayuda que nuestros pensamientos sean apreciados.


Esperaba que esto estuviera de alguna manera más regulado, pero después de sumergirse en el código de la estructura, la respuesta es negativa.

Lo que decidí hacer es lo siguiente:

Estructura de la solución

  • Áreas:
    • Administración
      • RouteConfig.cs
      • BundleConfig.cs
      • AdminAreaRegistration.cs

RouteConfig.cs

internal static class RouteConfig { internal static void RegisterRoutes(AreaRegistrationContext context) { //add routes } }

BundleConfig.cs

internal static class BundleConfig { internal static void RegisterBundles(BundleCollection bundles) { //add bundles } }

AdminAreaRegistration.cs

public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { RegisterRoutes(context); RegisterBundles(); } private void RegisterRoutes(AreaRegistrationContext context) { RouteConfig.RegisterRoutes(context); } private void RegisterBundles() { BundleConfig.RegisterBundles(BundleTable.Bundles); } }