2010-12-29 12 views
20

En mi aplicación, necesito cargar la misma vista desde dos controladores diferentes sin colocar la vista en el directorio de vistas compartidas.Asp.net MVC: ¿Puedo cargar una vista desde una carpeta de vista diferente?

Básicamente tengo esta estructura de carpetas

  • controladores
    • EventsController.cs
    • SearchController.cs
  • Vistas
    • Eventos
      • Preview.aspx
    • Buscar

básicamente la imagen es lo mismo que aquí en desbordamiento de pila. Obtendrá una vista previa de un grupo de preguntas en el enlace de preguntas, pero también obtendrá una página con el mismo formato cuando haga una búsqueda en la barra de búsqueda. Las vistas y los modelos de vista son presumiblemente idénticos.

Dado que la vista que necesito para la búsqueda es exactamente la misma que la vista que necesito para los eventos, me gustaría volver a utilizar la misma vista. Sin embargo, me gustaría evitar el uso del directorio compartido para esta vista específica.

Así que mi pregunta dos parte es ---

  1. Es esto posible, y si es así, ¿cómo?
  2. ¿Es esta una mala práctica?

Respuesta

33

Sí, puede hacerlo. Simplemente return View("~/Views/Events/Preview.aspx").

Sin embargo, desaprobaría por una serie de razones. Lo más importante es que esto no será obvio para cualquiera que trate de modificar el código más tarde (tal vez incluso usted) y podría generar posibles errores.

Un mejor enfoque podría ser crear una vista "Compartida" o una vista parcial compartida. Mi preferencia sería una vista parcial compartida, luego en su vista no compartida renderizar la funcionalidad de vista parcial que desea.

+0

Si sigo este enfoque, tendré vistas idénticas en la carpeta Eventos y en la carpeta Buscar, que no es un factor decisivo, solo trato de mantenerlo SECO. No necesito una vista parcial que represente todo en la vista, sería simplemente extraño. –

+0

¿Pero realmente está representando todo en la vista? Si nada más, ¿el título no sería diferente? También sugeriría que si realmente es exactamente la misma página, ¿por qué no usar una acción infantil para llamar a la otra página? –

+0

Tienes razón, podría llamarlo 'Eventos/Búsqueda' y mantenerlo en el mismo controlador. Porque sí, todo es muy idéntico. El título es dinámico, como lo es con todas mis vistas, y se genera en ViewModel. –

1
  1. Es posible.
  2. No estoy seguro de si está utilizando vistas de tipo fuerte. Pero supongamos que es así, entonces es un poco raro para mí que tenga la búsqueda de eventos & Buscar con el mismo modelo de vista. Posiblemente los separe con dos modelos de vista diferentes y la vista sería mejor en mi humilde opinión. Además, si especifica el nombre de vista para cargar en el controlador, de alguna manera se considera una vista de acoplamiento y un controlador, y ciertamente no es una buena idea.
+0

La función de búsqueda SÓLO busca eventos, por lo que los resultados tienen el mismo formato que los eventos. El modelo de vista es exactamente el mismo, y la única diferencia "sutil" es que el controlador de búsqueda tiene un parámetro 'q' (para la consulta). –

+0

tal vez deba abstraer la pantalla en un control y luego reutilizarla. – Femaref

Cuestiones relacionadas