vista una two tuple single one net mvc multiples multiple modelos buttons asp asp.net-mvc view

asp.net-mvc - una - tuple mvc



ASP.NET MVC-Vista con mĂșltiples modelos (3)

La solución anterior puede estar desactualizada. Esta solución parece funcionar para ASP.Net MVC5 +.

Vas a tener que usar el método ViewModel . Este es un excelente tutorial que puedes consultar.

http://tutlane.com/tutorial/aspnet-mvc/how-to-use-viewmodel-in-asp-net-mvc-with-example

ViewModel que unir varios modelos en un ViewModel y tomar todas las propiedades de cada modelo que desee usar en ViewModel .

PERO , se ViewModel que cree un nuevo Controlador y una nueva Vista para acomodar el ViewModel recién creado. Lee el tutorial

public class FooBarViewModel { public string A {get; set;} //Property for Foo public string B {get; set;} //Property for Bar } public ActionResult Edit() { FooBarViewModel fooBarVM = new FooBarViewModel(); fooBarVM.A = "aaa"; fooBarVM.B = "bbb"; return View(fooBarVM); }

Pero en este caso, debería poder pasar ViewModel a una vista diferente. Solo asegúrese de declarar esta directiva similar correctamente en la página foobar.cshtml .

@model FooBar.Models.FooBarViewModel

Estoy tratando de generar ese HTML

<form action="/some/process" method="post"> <input type="hidden" name="foo.a" value="aaa"/> <input type="hidden" name="bar.b" value="bbb"/> <input type="submit" /> </form>

para que pueda ser procesado por esta Acción:

public ActionResult Process(Foo foo, Bar bar) { ... }

Dado el código de Acción

public ActionResult Edit() { ViewData["foo"] = new Foo { A = "aaa" }; ViewData["bar"] = new Bar { B = "bbb" }; return View(); }

¿Qué debería escribir en la vista Edit.aspx? No quiero escribir los nombres ''foo.a'' y ''bar.b'' manualmente.


String-indexed ViewData es malo. Lo que probablemente quiera hacer es crear una pequeña clase de contenedor para sus datos de vista multivariable y pasarla a una vista fuertemente tipada. ES DECIR:

public class FooBarViewData { public Foo Foo {get; set;} public Bar Bar {get; set;} } public ActionResult Edit() { FooBarViewData fbvd = new FooBarViewData(); fbvd.Foo = new Foo(){ A = "aaa"}; fbvd.Bar = new Bar(){ B = "bbb"}; return View(fbvd); }

Luego, su vista se escribe fuertemente en FooBarViewData y puede llamar a los miembros de ese objeto utilizando la propiedad Model .


Usted tiene un par de opciones. En primer lugar, puede hacer referencia a ellos desde ViewData y usar una extensión HtmlHelper. O bien, podría crear un modelo específico de vista y usar una página de vista fuertemente tipada para Edit.aspx.

public class EditModel { public Foo foo { get; set; } public Bar bar { get; set; } } public ActionResult Edit() { var model = new EditModel(); model.foo = new Foo { A = "aaa" }; model.bar = new Bar { B = "bbb" }; return View( model ); }

(Edit.aspx es de tipo ViewPage<EditModel> )

De cualquier manera, la extensión HtmlHelper recogerá cualquier valor inicial.

<form action="/some/process" method="post"> <%= Html.Hidden( "foo.A" ) %> <%= Html.Hidden( "bar.B" ) %> </form>