Tengo una solución que usa WebForms .Net 4.0. Estoy planeando utilizar MVC3 en la misma solución. Seguí a Scott Hanselman blog y las cosas estaban sucediendo.Enrutamiento MVC3 con WebForms
Tengo que admitir que soy bastante nuevo en esto. Sin embargo, parece que me falta una gran parte de cómo funcionan realmente las rutas con respecto a los espacios de nombres.
En la actualidad, nuestra solución tiene la siguiente:
WebApplicatin:
Accounting
Receivables
ReceivablesGrid.aspx
ReceivableForm.aspx
Payables
PayablesGrid.aspx
PayablesForm
..etc.
Por lo tanto, se puede solicitar una página usando
Domain/Accounting/Receivables/ReceivablesGrid.aspx
Domain/Accounting/Receivables/ReceivableForm.aspx?Key=1
Domain/Accounting/Payables/PayablesGrid.aspx
Domain/Accounting/Payables/PayablesForm.aspx?Key=1
....
Estoy planeando añadir otra capa a parecerse a MVC.
WebApplicatin:
Accounting
Receivables
ReceivablesGrid.aspx
ReceivableForm.aspx
Mobile
Controllers
ReceivableConroller.cs
Models
Views
Receivables
Index
Update
Edit
Create
Payables
PayablesGrid.aspx
PayablesForm
Mobile
Controllers
PayablesConroller.cs
Models
Views
Payables
Index
Update
Edit
Create
..etc.
Por supuesto, estos no son los nombres reales. Sin embargo, traté de hacerlo lo más cercano posible a mi situación. Desafortunadamente, sería mejor si sigo esto porque podría usar parte de la lógica que podría agregarse en el mismo espacio de nombres. Además, crear carpetas en la raíz para parecerse a los Controladores, Vistas, Modelos no funcionaría con mi solución.
En Global.asax, añadí una ruta como tal:
routes.MapRoute(
"AccountingReceivablesMobile", // Route name
"Accounting/Receivables/Mobile/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"AccountingPayablesMobile", // Route name
"Accounting/Payables/Mobile/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Otra solución que acabé tratando es mediante la extensión de la RazorViewEngine. En el constructor del nuevo motor, establecí dos propiedades de la siguiente manera:
base.ViewLocationFormats = new string[] { "~/Accounting/Receivables/Mobile/Views/{1}/{0}.cshtml",
"~/Accounting/Payables/Mobile/Views/{1}/{0}.cshtml"
};
base.MasterLocationFormats = new[] { "~/Views/Shared/{0}.cshtml"}.
esto funcionó bastante bien. Sin embargo, siento que agregar esas rutas no es tan escalable como agregar un formulario web. Mi problema es que realmente no quiero agregar una ruta para cada ruta posible. Esto significa que tendré otra ruta o entrada a la matriz cuando agregue una nueva vista. Entonces, ¿cómo puedo hacer esto más simple? ¿Qué estoy haciendo mal? Miré a Areas sin embargo, parece forzar a crear una carpeta de Áreas y poner dentro de ella.
Gracias,
Hice la suposición en mi respuesta de que la estructura que describe anteriormente es un ensamblaje único. Lo que significa "Contabilidad" es solo una carpeta en un proyecto web y "Cuentas por pagar" y "Cuentas por cobrar" son simplemente subcarpetas. ¿Es eso correcto? – adammokan