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.

MVC – Enviar Clase en Clase al Controlador con FormData

Tengo 2 clases. Y estoy usando la primera clase en otra clase.

public class Adres
{
    public int? ID { get; set; }
    public string Sehir { get; set; }
    public string Ilce { get; set; }
    public string Mahalle { get; set; }
    public string Sokak { get; set; }
}

public class User
{
    public int? ID { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public Adres UserAdres { get; set; }
}

Tengo esta función en el controlador:

public ActionResult Kaydet(Users.User prm_query)
{
    int? ID = prm_query.ID;
    string UserName = prm_query.UserName;
    string Sehir = prm_query.UserAdres.Sehir;

   .....
}

Cuando envío datos con JQuery, uso este código y funciona bien.

$.post("/Users/Kaydet",
{
  ID: 1,
  UserName: 'Emre',
  Password: '112233',
  UserAdres: { ID: 1, Sehir: 'Istanbul', Ilce: 'Kadikoy', Mahalle: 'Kemal', Sokak: 'Yok' }
},
function (Result) {

   // .....
});

Pero quiero enviar estos datos con FormData y estoy intentando esto pero no funciona.

var formdata = new FormData();
formdata.append('ID', 1);
formdata.append('UserName', 'Emre');
formdata.append('Password', '112233');
formdata.append('UserAdres', { ID: 1, Sehir: 'Istanbul', Ilce: 'Kadikoy', Mahalle: 'Kemal', Sokak: 'Yok' });

$.ajax({
   type: 'POST',
   url: '/Users/Kaydet',
   dataType: 'json',
   processData: false,
   contentType: false,
   data: formdata
}).done(function (Result) {

   // ...

});

Cuando ejecuto este código, en el controlador UserName y Password funcionan pero UserAdres siempre llega como null. ¿Cómo puedo enviar esta subclase con FormData?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Al utilizar FormData para enviar datos al servidor, debemos asegurarnos de que los datos estén en un formato compatible con FormData. En este caso, necesitamos convertir el objeto UserAdres a un formato de cadena que FormData pueda entender.

    Una forma de hacer esto es utilizar el método JSON.stringify() para convertir el objeto UserAdres a una cadena JSON y luego agregarlo al objeto FormData.

    Aquí hay un código actualizado que debería funcionar:

    var formdata = new FormData();
    formdata.append('ID', 1);
    formdata.append('UserName', 'Emre');
    formdata.append('Password', '112233');
    formdata.append('UserAdres', JSON.stringify({ ID: 1, Sehir: 'Istanbul', Ilce: 'Kadikoy', Mahalle: 'Kemal', Sokak: 'Yok' }));
    
    $.ajax({
       type: 'POST',
       url: '/Users/Kaydet',
       dataType: 'json',
       processData: false,
       contentType: false,
       data: formdata
    }).done(function (Result) {
    
       // ...
    
    });
    

    En el controlador, podemos deserializar la cadena JSON de regreso al objeto utilizando un deserializador JSON:

    public ActionResult Kaydet(Users.User prm_query)
    {
        int? ID = prm_query.ID;
        string UserName = prm_query.UserName;
        string Sehir = prm_query.UserAdres.Sehir;
    
        // Deserializar UserAdres cadena JSON al objeto Adres
        prm_query.UserAdres = JsonConvert.DeserializeObject<adres>(prm_query.UserAdres.ToString());
    
       // ...
    }
    

    El uso de un deserializador JSON como JsonConvert.DeserializeObject del paquete Newtonsoft.Json nos permite convertir la cadena UserAdres de regreso al objeto Adres, lo que facilita el acceso a sus propiedades.

Comments are closed.