Tengo el siguiente diseño para mi proyecto mvc:
- / Controladores
- /Manifestación
- / Demo / DemoArea1Controller
- / Demo / DemoArea2Controller
- etc ...
- /Puntos de vista
- /Manifestación
- /Demo/DemoArea1/Index.aspx
- /Demo/DemoArea2/Index.aspx
Sin embargo, cuando tengo esto para DemoArea1Controller
:
public class DemoArea1Controller : Controller
{
public ActionResult Index()
{
return View();
}
}
Aparece el error "No se pudo encontrar la vista 'índice' o su maestro", con las ubicaciones de búsqueda habituales.
¿Cómo puedo especificar los controladores en la búsqueda del espacio de nombres "Demo" en la subcarpeta de vista "Demo"?
asp.net-mvc
views
Daniel Schaffer
fuente
fuente
Respuestas:
Puede ampliar fácilmente WebFormViewEngine para especificar todas las ubicaciones en las que desea buscar:
Asegúrese de recordar registrar el motor de visualización modificando el método Application_Start en su Global.asax.cs
fuente
Ahora en MVC 6 puede implementar la
IViewLocationExpander
interfaz sin perder el tiempo con los motores de vista:donde
{0}
es el nombre de la vista de destino,{1}
- nombre del controlador y{2}
- nombre del área.Puede devolver su propia lista de ubicaciones, fusionarla con la predeterminada
viewLocations
(.Union(viewLocations)
) o simplemente cambiarlas (viewLocations.Select(path => "/AnotherPath" + path)
).Para registrar su expansor de ubicación de vista personalizada en MVC, agregue las siguientes líneas al
ConfigureServices
método en elStartup.cs
archivo:fuente
En realidad, hay un método mucho más fácil que codificar las rutas en su constructor. A continuación se muestra un ejemplo de cómo extender el motor Razor para agregar nuevas rutas. Una cosa de la que no estoy completamente seguro es si las rutas que agregue aquí se almacenarán en caché:
Y tu Global.asax.cs
Una cosa a tener en cuenta: su ubicación personalizada necesitará el archivo ViewStart.cshtml en su raíz.
fuente
Si solo desea agregar nuevas rutas, puede agregar a los motores de vista predeterminados y ahorrar algunas líneas de código:
Lo mismo se aplica a
WebFormEngine
fuente
En lugar de subclasificar RazorViewEngine, o reemplazarlo directamente, puede simplemente alterar la propiedad PartialViewLocationFormats existente de RazorViewEngine. Este código va en Application_Start:
fuente
La última vez que verifiqué, esto requiere que cree su propio ViewEngine. Sin embargo, no sé si lo hicieron más fácil en RC1.
El enfoque básico que utilicé antes del primer RC fue, en mi propio ViewEngine, dividir el espacio de nombres del controlador y buscar carpetas que coincidieran con las partes.
EDITAR:
Regresé y encontré el código. Esta es la idea general.
fuente
Intente algo como esto:
fuente
Nota: para ASP.NET MVC 2 tienen rutas de ubicación adicionales que deberá configurar para las vistas en 'Áreas'.
La creación de un motor de visualización para un área se describe en el blog de Phil .
Nota: Esto es para la versión preliminar 1, por lo que está sujeto a cambios.
fuente
La mayoría de las respuestas aquí, borre las ubicaciones existentes llamando
ViewEngines.Engines.Clear()
y luego agréguelas nuevamente ... no es necesario hacer esto.Simplemente podemos agregar las nuevas ubicaciones a las existentes, como se muestra a continuación:
Ahora puede configurar su proyecto para usar lo anterior
RazorViewEngine
en Global.asax:Consulte este tutorial para obtener más información.
fuente