¿Cuál es su forma de pasar datos a la página maestra (utilizando ASP.NET MVC) sin romper las reglas de MVC?
Personalmente, prefiero codificar el controlador abstracto (controlador base) o la clase base que se pasa a todas las vistas.
c#
.net
asp.net
asp.net-mvc
Łukasz Sowa
fuente
fuente
Respuestas:
Si prefiere que sus vistas tengan clases de datos de vistas fuertemente tipadas, esto podría funcionar para usted. Otras soluciones son probablemente más correctas, pero este es un buen equilibrio entre diseño y practicidad en mi humilde opinión.
La página maestra toma una clase de datos de vista fuertemente tipada que contiene solo información relevante para ella:
Cada vista que usa esa página maestra toma una clase de datos de vista fuertemente tipada que contiene su información y que se deriva de los datos de vista de las páginas maestras:
Como no quiero que los controladores individuales sepan nada sobre cómo reunir los datos de las páginas maestras, encapsulo esa lógica en una fábrica que se pasa a cada controlador:
La herencia coincide con el maestro para ver bien la relación, pero cuando se trata de representar parciales / controles de usuario, compondré sus datos de vista en los datos de vista de páginas, por ejemplo
Este es solo un código de ejemplo y no está destinado a compilarse tal cual. Diseñado para ASP.Net MVC 1.0.
fuente
Prefiero dividir las partes basadas en datos de la vista maestra en parciales y renderizarlas usando Html.RenderAction . Esto tiene varias ventajas distintas sobre el enfoque de herencia del modelo de vista popular:
fuente
EDITAR
Error genérico ha proporcionado una mejor respuesta a continuación. ¡Por favor leelo!
Respuesta original
Microsoft ha publicado una entrada sobre la forma "oficial" de manejar esto. Esto proporciona un recorrido paso a paso con una explicación de su razonamiento.
En resumen, recomiendan usar una clase de controlador abstracto, pero compruébelo usted mismo.
fuente
Los controladores abstractos son una buena idea y no he encontrado una mejor manera. También me interesa ver lo que han hecho otras personas.
fuente
Investigué un poco y encontré estos dos sitios. Quizás puedan ayudar.
Consejo de ASP.NET MVC n. ° 31: pasar datos a páginas maestras y controles de usuario
Pasar datos a páginas maestras con ASP.NET MVC
fuente
Encuentro que un padre común para todos los objetos de modelo que pasa a la vista es excepcionalmente útil.
De todos modos, siempre habrá algunas propiedades de modelo comunes entre las páginas.
fuente
El objeto Request.Params es mutable. Es bastante fácil agregarle valores escalares como parte del ciclo de procesamiento de solicitudes. Desde la perspectiva de la vista, esa información podría haberse proporcionado en QueryString o FORM POST. hth
fuente
Creo que otra buena manera podría ser crear una interfaz para ver con alguna propiedad como ParentView de alguna interfaz, para que pueda usarla tanto para los controles que necesitan una referencia a la página (control principal) como para las vistas maestras a las que se debe acceder desde puntos de vista.
fuente
Las otras soluciones carecen de elegancia y tardan demasiado. Pido disculpas por hacer esto muy triste y empobrecido casi un año después:
Claramente tengo este método estático Get () en SiteMasterViewData que devuelve SiteMasterViewData.
fuente