side pages net mvc asp asp.net-mvc modelbinder

pages - ¿El Model Binder en ASP.NET MVC Beta Support List<T>?



razor pages vs mvc (5)

Definí un objeto similar. Seguí la publicación sobre el enlace a una lista como se mencionó anteriormente, mientras que el enlace funciona, no pude usar la lista blanca ni la lista negra en el parámetro de acción del controlador. El modelo es un IList

Tome las clases de ejemplo a continuación. Quiero mostrar el cliente y dos direcciones (de una LISTA) en un formulario. ¿La carpeta modelo en MVC beta es compatible con esto o tendré que escribir mi propia carpeta personalizada?

public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public List<Address> Addresses { get; set; } public Customer() { Addresses = new List<Address>(); } } public class Address { public int Line1 { get; set; } public int Line2 { get; set; } public int City { get; set; } public int State { get; set; } public int Zip { get; set; } }

¿Cómo codificaría los campos? ¿Me gusta esto?

<!-- some HTML formatting --> <%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%> <!-- some more HTML formatting --> <%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%> <!-- end of HTML form formatting -->


Nunca lo intenté, pero vea esta publicación, se trata de un modelo vinculante para una lista, quizás pueda ayudarlo.


Use NameValueDeserializer de MvcContrib para hacerlo más simple. Supongamos que su página proviene de ViewPage <Cliente>. Puedes hacerlo:

<%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%> <%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%>

Y esto:

public ActionResult Save([Deserialize]Customer customer)

Y el cliente se deserializará de la publicación del formulario con la colección de direcciones llena. Sus índices no tienen que estar en secuencia; esto admite casos en los que desee eliminar filas del lado del cliente antes de que se publique.

En el caso de que esté deserializando algo del diccionario de datos de visualización (en lugar del Modelo), entonces la sintaxis es similar a [Deserialize ("cliente")], donde "cliente" es el prefijo.

Es posible que esta publicación de blog sea interesante y relevante.


Solo para hacer esto completo. Es importante que use los campos ocultos con el nombre Index. Entonces mi código anterior se convierte en esto:

<!-- some HTML formatting --> <%= Html.Hidden("customer.address.Index", 0) %> <%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%> <!-- some more HTML formatting --> <%= Html.Hidden("customer.address.Index", 1) %> <%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%> <!-- end of HTML form formatting -->

¡Funciona a las mil maravillas!


Puede pasar una lista de objetos con ViewData así, pero debe cambiar algunas de las líneas. Leer más aquí:

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

y aquí:

ASP.NET MVC: ¿Cómo paso una lista (de una clase en el Modelo) a un repetidor en una Vista?

Espero que esto ayude

Editar

Si usa un modelo, primero debe configurar el DataContext y seleccionar la lista, pero seguro que puede usar las clases generadas si usa LINQ.