2010-05-05 55 views
9

Tengo una vista que es no fuertemente tipada. Sin embargo, tengo en esta vista una vista parcial fuertemente tipada.¿Cómo pasar el modelo de una vista a una vista parcial?

¿Cómo paso el modelo a esta vista fuertemente tipada?

he intentado algo así como

public ActionResult Test() 
     { 
       MyData = new Data(); 
       MyData.One = 1; 
       return View("Test",MyData) 
     } 

En mi TestView

<% Html.RenderPartial("PartialView",Model); %> 

Esto me da una excepción stackoverflow. Entonces no estoy seguro de cómo pasarlo. Por supuesto, no quiero hacer que la vista de prueba sea fuertemente tipada, de ser posible, ya que si tuviera 10 vistas parciales fuertemente tipadas en esa vista, necesitaría algún tipo de envoltorio.

+0

tienes razón sobre la envoltura, y no es una mala manera de ir – hunter

Respuesta

4

Debe ampliar su modelo para que pueda proporcionar todos los campos necesarios para la vista (esto se llama ViewModel) o puede proporcionarlos por separado con ViewData.

public ActionResult Test() 
     { 
       MyData = new Data(); 
       MyData.One = 1; 
       ViewData["someData"]=MyData; 
       return View(); 
     } 

a continuación:

<% Html.RenderPartial("PartialView",ViewData["someData"]); %> 

ViewData es un buen diccionario losely mecanografiado

+0

Entonces tendría que lanzarlo en la vista parcial ¿no? – chobo2

+1

¿Qué quiere decir? Si su vista parcial está fuertemente tipada con la clase MyData, la línea anterior representará su vista sin problemas. Como puede ver, usted envía más de un modelo a su vista mediante ViewData porque no está muy tipado, y luego extrae sus modelos para cada PartialView fuertemente tipado. –

+0

Intenté esto pero no funciona para mí, así que probé @ Html.Partial y descubrí que funciona para mí. No sé por qué es así. – lawphotog

0

Ponga el objeto requerido por el parcial en Viewdata y use ist en la vista como entrada para el parcial.

public ActionResult Test() 
     { 
       ViewData["DataForPartial"] = new PartialDataObject(); 
       return View("Test") 
     } 

En vista del uso:

<% Html.RenderPartial("PartialView",ViewData["DataForPartial"]); %> 

Pero de todos modos: No hay razón para no tener una visión stronly mecanografiado.

+0

El problema no es que sea la vista siendo una vista fuertemente tipada es el hecho de que si tiene más de una vista parcial en esa vista no puede convertirla en una vista fuertemente tipada para todos esos casos a menos que haga algún tipo de envoltorio o supongo que use ViewData. – chobo2

Cuestiones relacionadas