es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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) <--- ???
{

}
Tags:  , ,

Answer

  1. Avatar for 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 modelo Business, incluyendo sus propiedades complejas ContactInfo y AddressInfo, podemos utilizar el atributo [Bind] con el parámetro Include para especificar una lista separada por comas de los nombres de las propiedades a incluir:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Create([Bind("Id,Name,WebAddress,ContactInfo,TelNo,Mobile,AddressInfo,BuildingNo,Street,City,Postcode")] Business business)
    {
        // código para manejar el nuevo objeto Business
    }
    

    Tenga en cuenta que estamos incluyendo explícitamente todas las propiedades de los objetos ContactInfo y AddressInfo, así como sus subpropiedades, al especificarlos en el parámetro Include del atributo [Bind]. De esta manera, el enlazador de modelos podrá vincular correctamente todos los datos del formulario al objeto Business.

    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.

Comments are closed.