¿Cómo se enlazan los datos en un modelo complejo en una acción POST del controlador en ASP.NET Core 3.1 (o superior) MVC?
¿Cómo se vinculan los datos en un modelo complejo en una acción de controlador de publicación en ASP.NET Core 3.1 (o superior) MVC?
Este es solo un ejemplo de modelo, pero las lecciones aprendidas son no aplanar y no tener un viewmodel separado.
Dado un modelo de ejemplo como este:
public class Business
{
public int Id {get; set;}
public string Name {get; set;}
public string WebAddress {get; set;}
public ContactDetails ContactInfo {get; set;}
public Address AddressInfo {get; set;}
}
public class ContactDetails
{
public string TelNo {get; set;}
public string Mobile {get; set;}
}
public class Address
{
public string BuildingNo {get; set;}
public string Street {get; set;}
public string City {get; set;}
public string Postcode {get; set;}
}
Todas las propiedades individuales aparecen en el formulario en la vista.
¿Cómo vincularías esto específicamente al método post en un controlador?
¿Cómo se vinculan las propiedades complejas?
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create([Bind("Name,WebAddress")] DeliCakeBiz deliCakeBiz) <--- ???
{
}
davy.ai
Para vincular datos en un modelo complejo en una acción de publicación de controlador en ASP.NET Core 3.1 (o superior) MVC, puede usar el atributo
[Bind]
para especificar explícitamente qué propiedades deben vincularse. En este caso, como queremos vincular todas las propiedades del modeloBusiness
, incluyendo sus propiedades complejasContactInfo
yAddressInfo
, podemos utilizar el atributo[Bind]
con el parámetroInclude
para especificar una lista separada por comas de los nombres de las propiedades a incluir:Tenga en cuenta que estamos incluyendo explícitamente todas las propiedades de los objetos
ContactInfo
yAddressInfo
, así como sus subpropiedades, al especificarlos en el parámetroInclude
del atributo[Bind]
. De esta manera, el enlazador de modelos podrá vincular correctamente todos los datos del formulario al objetoBusiness
.También tenga en cuenta que estamos utilizando el atributo
ValidateAntiForgeryToken
para protegernos contra ataques de falsificación de solicitudes entre sitios (CSRF). Esto requiere que se incluya un token de anti-falsificación coincidente en los datos del formulario, el cual se genera mediante una llamada a@Html.AntiForgeryToken()
en la vista Razor.