asp.net mvc - example - Cómo enviar objetos modelo en Html.RenderAction(MVC3)
partial view with model (3)
En realidad, puede pasar un objeto a un método de controlador usando 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 hace así:
Controlador:
public class GroovyController : Controller
{
public ActionResult MyTestView(MyModel m)
{
var viewPath = @"~/bin/CommonViews/MyTestView";
return View(viewPath, m);
}
}
Página MVC (usando la sintaxis de Razor):
@Html.Action("MyTestView", "Groovy", new { m = Model })
o usando el método RenderAction
:
@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
Nota: en @Html.Action()
, el objeto Model
debe ser del tipo MyModel
y ese 3er 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 = Model
.
Estoy usando la maquinilla de afeitar MVC3, y estoy tratando de pasar un objeto a una vista parcial, y no está funcionando.
Esto funciona bien sin enviar el modelo de objetos a la vista parcial:
Html.RenderAction("Index", "ViewName");
Probar esto no envía el objeto modelo, en su lugar obtengo nulos (el objeto tiene datos y la vista lo espera): ''
Html.RenderAction("Index", "ViewName", objectModel);
¿Esto es posible incluso 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!
Por lo general, si tengo un modelo ya disponible, tiene más sentido usar Html.Partial
que intentar representar una acción.
@Html.Partial("Foo", Model.FooModel)
Donde Foo.cshtml
es un archivo de vista (tal vez en su carpeta compartida) fuertemente tipeado con @model FooProject.Models.FooModel
o como se @model FooProject.Models.FooModel
su modelo. 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 de Foo
usa el mismo modelo que la página principal.
RenderAction
generalmente es mejor cuando tiene parámetros simples, porque simula una solicitud para 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.
di que quieres pasar a foo
como modelo, hazlo primero
public class Foo {
public string Name { get; set; }
public int Age { get; set; }
}
ahora haz un ActionResult
public ActionResult FooBar(Foo _foo){
return PartialView(_foo);
}
llámalo
@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });