2012-01-22 24 views
21

Estoy usando la maquinilla de afeitar MVC3, y estoy tratando de pasar un objeto a una vista parcial, y no está funcionando.Cómo enviar un modelo de objeto en Html.RenderAction (MVC3)

Esto funciona bien sin necesidad de enviar el modelo de objetos a la vista parcial:

Html.RenderAction("Index", "ViewName"); 

Tratando este no enviado el objeto modelo, yo estoy poniendo en su lugar los nulos (el objeto tiene los datos, y la vista espera it): '

Html.RenderAction("Index", "ViewName", objectModel); 

¿Esto es posible con RenderAction?

Gracias!

Editar: Encontré el error, hubo un error con la acción del controlador que no recogió el objeto enviado. ¡Gracias por toda tu ayuda!

+1

¿podría proporcionar la firma de la acción que está llamando? – ivowiblo

+0

¿por qué está pasando el nombre de vista como parámetro? debería pasar la acción y el controlador en su lugar – ivowiblo

+0

@ Html.RenderAction ("Índice", "ViewName", nuevo {objectParam1 = objectModel1, objectParam1 = objectModel2}) –

Respuesta

23

que usted quiere pasar foo como modelo, lo convierten en la primera

public class Foo { 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

ahora hacer una ActionResult

public ActionResult FooBar(Foo _foo){ 
    return PartialView(_foo); 
} 

llaman

@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 }); 
+0

Gracias por su respuesta. Tuve un error que pasé por alto en la firma de la Acción del Controlador. Se corrigió y ahora está recibiendo el objeto. – Michael

+0

¿Esto pasa ModelState? – aelstonjones

6

Por lo general, si tengo un modelo ya disponible, tiene más sentido usar Html.Partial que intentar renderizar una ción.

@Html.Partial("Foo", Model.FooModel) 

Dónde Foo.cshtml es un archivo de vista (tal vez en la carpeta compartida) con establecimiento inflexible con @model FooProject.Models.FooModel o lo que su modelo se llama. Este puede ser un modelo tan complejo como lo necesites. El modelo es el modelo principal de su página en el que debe establecer FooModel, o simplemente omita este parámetro si la vista Foo utiliza el mismo modelo que la página primaria.

RenderAction generalmente es mejor cuando tiene solo parámetros simples, porque simula una solicitud a una acción regular que tiene parámetros de cadena de enrutamiento/consulta, y luego descarga esa respuesta en su página. Funciona bien si necesita colocar algo en un Diseño que no está disponible en el modelo de su página, como un elemento en una barra lateral.

29

En realidad, puede pasar un objeto a un método de controlador utilizando Acción. Esto se puede hacer en cualquier vista disponible, por ejemplo, tengo una en una biblioteca compartida que se construye para proyectar carpetas bin que hacen referencia a mi proyecto compartido (propiedades - Copiar si es más reciente en el archivo de vista, en Visual Studio). Se realiza así:

controlador:

public class GroovyController : Controller 
{ 
    public ActionResult MyTestView(MyModel m) 
    { 
     var viewPath = @"~\bin\CommonViews\MyTestView"; 
     return View(viewPath, m); 
    } 
} 

página MVC (utilizando la sintaxis Razor):

@Html.Action("MyTestView", "Groovy", new { m = Model }) 

Nota: en el @ Html.Action, el objeto Modelo debe ser de tipo MyModel y ese tercer parámetro debe establecerse en el nombre de la variable del controlador, de los cuales el mío es MyModel m. El m es lo que debe asignar, entonces lo hago m = Modelo.

+7

Esta debería ser la respuesta aceptada. Gracias por agregarlo un año después. –

+0

@ Valamas-AUS Gracias :) – theJerm

Cuestiones relacionadas