Ver nombres de directorios y nombres de archivos son importantes, porque el marco ASP.NET MVC tiene ciertas suposiciones sobre ellos. Si no se ajusta a estas suposiciones, debe escribir el código para que el marco sepa lo que está haciendo. En términos generales, debe ajustarse a estas suposiciones a menos que tenga una buena razón para no hacerlo. mirada
Vamos a la más simple acción del controlador posible:
public ActionResult NotAuthorized()
{
return View();
}
Debido a que ningún nombre de la vista se ha especificado en la llamada a Ver(), el marco supondrá que la vista nombre del archivo será el mismo que el de Acción nombre. El marco tiene un tipo llamado ViewEngine que proporcionará la extensión. El ViewEngine predeterminado es WebFormViewEngine, que tomará ese nombre y anexará un .aspx. Entonces, el nombre de archivo completo en este caso sería NotAuthorized.aspx.
¿Pero en qué carpeta se encontrará el archivo? Una vez más, ViewEngine proporciona esa información. Con WebFormViewEngine, que se verá en dos carpetas: ~/Views/Shared y ~/Vistas/{controlador}
lo tanto, si el controlador se llama AccountController, se vería en ~/Vistas/Cuenta
Pero hay Es posible que haya momentos en los que no quiera seguir estas reglas. Por ejemplo, dos acciones diferentes pueden devolver la misma vista (con un modelo diferente, o algo así). En este caso, si se especifica el nombre de la vista de manera explícita en su acción:
public ActionResult NotAuthorized()
{
return View("Foo");
}
Tenga en cuenta que con WebFormViewEngine, el "nombre de la vista" es generalmente el mismo que el nombre del archivo, menos la extensión, pero el marco no requiere el de otros motores de vista.
Del mismo modo, también podría tener una razón para querer que su aplicación busque vistas y carpetas no predeterminadas. Puede hacerlo creando su propio ViewEngine. Muestro la técnica en this blog post, pero los nombres de los tipos son diferentes, ya que se escribieron para una versión anterior del marco. La idea básica sigue siendo la misma, sin embargo.
¿Pueden las carpetas dentro de la Vista tener subcarpetas? si es así, ¿cómo los alcanza el Controlador? Por ejemplo ... Admin/Profile/Edit/1 –
Tendría que escribir su propio ViewEngine para hacer esto. WebFormViewEngine no los encontrará. –
@Eric Configuración 'ViewLocationFormats' en la instancia del motor de vista de formulario web es todo lo que se necesita para habilitar la colocación de vistas en las subcarpetas. – bzlm