Exponer propiedades comunes a un modelo MVC

En MyMainView tengo múltiples PartialViews.

Cada PartialView está fuertemente tipado en una propiedad expuesta en MyMainView y cada vista parcial también contiene información común.

eg

public class MainModel
{
    public SubModel1 { get; set; }
    public SubModel2 { get; set; }
    public SubModel3 { get; set; }
    public CommonStuff { get; set; }
}

¿Existe una práctica aceptada para lograr compartir esta propiedad común?

Estaba pensando en tener una propiedad en el SubModelo que hiciera referencia a su padre. ¿Es esto recomendado/no recomendado?

p.ej.

public class SubModel1
{
    public int Number { get; set; }
    public MainModel ParentModel { get; set; }
}

El objetivo principal aquí es evitar cargar los mismos datos una y otra vez.

Para el modelo que estoy viendo actualmente, es una serie de diccionarios de búsqueda que se comparten en la vista y se usan en cosas como listas desplegables.

preguntado el 12 de junio de 12 a las 16:06

2 Respuestas

Este planteamiento de « post le ayudará a resolver la confusión.

En su caso, la mayoría de las veces tendrá que consultar el modelo completo en la acción principal y enviarlo a la vista principal. Desde la vista principal, pase el modelo principal a las vistas parciales que dependen tanto del submodelo como de las propiedades comunes usando Html.RenderPartial o solo los submodelos a las vistas parciales que necesitan solo eso.

Debe usar acciones secundarias si está mostrando un submodelo en una vista parcial y eso vista parcial no depende del modelo principal, simplemente la vista parcial es completamente independiente de la vista principal.

También puede optar por acciones secundarias, suponga que necesita aplicar un comportamiento de almacenamiento en caché para una sección en particular.

Puede evitar acciones secundarias, suponga que desea mostrar el mismo modelo en dos o más vistas parciales en la misma vista, porque tiene que consultar los datos una y otra vez.

Entonces, la solución es que debe elegir juiciosamente acciones secundarias o Html.RenderPartials según los comentarios anteriores.

Respondido el 12 de junio de 12 a las 18:06

Podrías usar acciones de niños. phil haack escribió en su blog a cerca de ellos. De esta manera, podría encapsular toda la funcionalidad común en un ciclo de vida de Modelo/Controlador/Vista separado que es distinto del principal e incrustarlo como un widget.

Respondido el 12 de junio de 12 a las 16:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.