Pregunta

Estoy confundido con la forma en que se organizan las vistas, y es importante entender esto ya que ASP.NET MVC usa convenciones para que todo funcione correctamente.

Bajo el directorio de vistas, hay subdirectorios. Dentro de estos subdirectorios hay vistas. Supongo que los subdirectorios se asignan a los controladores, y los controladores actúan en las vistas contenidas dentro de sus subdirectorios.

¿Existe una expectativa emergente de qué tipo de vistas están contenidas en estos directorios? Por ejemplo, ¿la página predeterminada para cada directorio debe ser index.aspx? ¿Deben las páginas seguir una convención de nomenclatura como Crear [controlador] .aspx, Lista [controlador] .aspx, etc.? ¿O no importa?

¿Fue útil?

Solución

Ver nombres de directorios y nombres de archivos es importante, porque el marco ASP.NET MVC hace ciertas suposiciones acerca de ellos. Si no cumple con estas suposiciones, debe escribir un código para que el marco sepa lo que está haciendo. En general, debe cumplir con estas suposiciones a menos que tenga una buena razón para no hacerlo.

Veamos la acción del controlador más simple posible:

    public ActionResult NotAuthorized()
    {
        return View();
    }

Debido a que no se ha especificado ningún nombre de vista en la llamada a Ver (), el marco supondrá que el nombre de archivo de la vista será el mismo que el nombre de la Acción. El marco tiene un tipo llamado ViewEngine que suministrará la extensión. El ViewEngine predeterminado es WebFormViewEngine, que tomará ese nombre y le agregará un .aspx. Por lo tanto, el nombre de archivo completo en este caso sería NotAuthorized.aspx.

¿Pero en qué carpeta se encontrará el archivo? Una vez más, el ViewEngine suministra esa información. Con WebFormViewEngine, se verá en dos carpetas: ~ / Views / Shared y ~ / Views / {controller}

Entonces, si su controlador se llamara AccountController, se vería en ~ / Vistas / Cuenta

Pero puede haber ocasiones en las que no quieras seguir estas reglas. Por ejemplo, dos acciones diferentes pueden devolver la misma vista (con un modelo diferente o algo así). En este caso, si especifica el nombre de la vista explícitamente en su acción:

    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

Tenga en cuenta que con WebFormViewEngine, el " nombre de vista " generalmente es el mismo que el nombre de archivo, menos la extensión, pero el marco no requiere el de otros motores de visualización.

Del mismo modo, también puede tener una razón para que su aplicación busque vistas y carpetas no predeterminadas. Puedes hacerlo creando tu propio ViewEngine. Muestro la técnica en esto publicación de blog , pero los nombres de tipo son diferentes, ya que se escribió para una versión anterior del marco. Sin embargo, la idea básica sigue siendo la misma.

Otros consejos

Con respecto a los nombres esperados para las vistas, creo que es una de esas cosas que cada proyecto u organización intentará estandarizar.

Como indicaste en tu pregunta, es posible que algunas de estas Vistas (o más precisamente, las Acciones que las representan) se vuelvan populares en general, como por ejemplo las siguientes que son comunes en las aplicaciones RoR que adoptan el Paradigma REST:

  • / orders / (es decir, índice)
  • / orders / show / 123
  • / orders / edit / 123
  • / orders / update / 123
  • / orders / new
  • / orders / create
  • / orders / destroy / 123

La elección / estandarización de las Vistas depende en gran medida de cómo modele su aplicación (para decir lo obvio) y de lo detallado que quiere ir. Cuanto más cerca asigne sus controladores a las clases de modelos individuales (tos ... recursos ... tos), más cortas serán las acciones y más fácilmente podrá seguir un conjunto estándar de acciones (como en el ejemplo anterior). ).

También creo que las acciones más cortas ayudan a impulsar cada vez más la lógica de negocios del modelo en los modelos, donde pertenece.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top