2010-09-24 11 views
6

Al manejar una relación 1 ---> 0 ... 1, intento usar una vista parcial separada para el final 0 ... 1. Me gustaría utilizar RenderPartial() en lugar de RenderAction(), por el bien de la eficiencia.ASP.NET MVC2: ¿es posible acceder a los datos del modelo de la vista principal desde la vista parcial?

¿Es posible obtener acceso a los datos del modelo de la vista contenedora desde esta vista parcial, para acceder al PK/ID del objeto principal?

¿Es este solo un triste intento de pirateo que ni siquiera debería considerarse en primer lugar?

¿Alguien tiene un mejor ejemplo de cómo manejar esta relación 1 ---> 0 ... 1 usando MVC?

+1

¿Es difícil pasar el Id a la vista parcial? –

+0

La vista parcial espera un modelo de tipo (0 ... 1 final), que solo incluye una propiedad de navegación que apunta al extremo principal. – asfsadf

Respuesta

4

Tipo de.

Si no pasa un modelo al RenderPartial, la vista principal se pasa de forma predeterminada. Para que pueda acceder a él a través de la propiedad parcial Model.

Pero si pasa un modelo, entonces no, el parcial no puede ver el modelo de los padres, porque lo ve como propio.

¿Es este un triste intento de hackeo que ni siquiera debería considerarse en primer lugar?

Yo diría "kludge" en lugar de "hackear", pero sí, probablemente. :)

+0

Hmm ... se queja de haber pasado el tipo incorrecto ... – asfsadf

+0

Tendrá el tipo "incorrecto" si (1) el parcial está fuertemente tipado y (2) el padre y el parcial requieren diferentes tipos. –

+1

De hecho. Intento retener la separación, para fines de enlace/validación, y creo que tendré que buscar un tipo diferente de "kludge" en este escenario. Probablemente termine virando en ParentObjectID como una propiedad en el ChildObject. Ick. – asfsadf

3

Primero pregunte por qué necesita el PK?

Sin embargo, tendría una propiedad ParentID en el modelo secundario si realmente la necesitaba. Luego, simplemente configúralo antes de enviarlo.

foreach(var vChild in Model.Children) 
{ 
    vChild.ParentID = Model.ID; 
    Html.RenderPartial(ViewName, vChild) 
} 

Si necesita TODOS los datos del padre, puede tener una Propiedad principal en su lugar y establecer toda la propiedad.

Esta lógica sería más adecuado para estar en el modelo en sí no obstante como esto:

List<Children> mChildren; 
public void AddChild(Child tChild) 
{ 
    tChild.ParentID = this.ID; 
    mChildren.Add(tChild); 
} 

o algo por el estilo. Realmente dependería de cómo se hayan configurado las cosas, pero esa es la idea general.

+0

Esto fue muy útil, ¡gracias! – scolja

+0

Eso tiene sentido; en mi caso, solo necesito una sola propiedad derivada del padre, por lo que realmente tiene sentido generar esa propiedad desde el padre y luego crearla en el hijo mientras estoy generando el objeto viewmodel. – neminem

Cuestiones relacionadas