Tengo una lista de entradas de usuario en un objeto 'datos'. (por ejemplo, data.username, data.password, data.age)

Estoy pasando el objeto de datos al backend como este usando angular.

var submits = "=" + JSON.stringify(data);

$.ajax({
            type: "POST",
            url: serviceURL,
            data: submits
});

Estoy pasando dos objetos más. selecciones y grilla. ¿Cómo puedo pasar estos tres juntos en una sola llamada ajax? o tengo que transferirlo de forma independiente. afectará el rendimiento si transfiero estos detalles por separado.

¿puedo hacer algo como esto para enviar el objeto juntos en una llamada ajax?

var data = {};
data[0] = data1;
data[1] = data2;

¿Cómo puedo recuperarlo por separado en el lado del servidor usando c # si en absoluto se pasan juntos?

Aquí están los 3 objetos que necesito pasar

data -->>         ["Raul","New York","31"]
selections-->>    ["dy.txt","my.txt","yy.txt"]
grid-->           ["sesion","id"]
1
Ayesha 10 dic. 2015 a las 22:32

3 respuestas

La mejor respuesta

Puede enviar múltiples objetos / variables en ajax con:

var submits = "=" + JSON.stringify(data);
$.ajax({
        type: "POST",
        url: serviceURL,
        data: {submits : submits, data1:data1, data2:data2}
});

En su C #, puede acceder a los datos 1 y 2 de la misma manera que maneja los envíos ahora. Dependiendo de lo que se encuentre en data1 y data2, es posible que primero necesite stringificarlo.

segunda opción :
También puedes si quieres (pero es más feo) usar el stringify en todo de una vez y solo pasar el string:

data = {};
data["data1"] = data1;
data["data2"] = data2;
var submits = "=" + JSON.stringify(data);
1
Bas van Stein 10 dic. 2015 a las 19:57

Suponiendo que tiene un modelo de vista como este en el lado del servidor

public class CreateUserViewModel
{
  public string UserName{set;get;}
  public string Location {set;get;}
  public int Age {set;get;}
}
public class RegisterViewModel
{
  public CreateUserViewModel User {set;get;}
  public List<string> Selections {set;get;}
  public List<string> Grid {set;get;}
}

Y un método de acción MVC como este

public ActionResult Create(RegisterViewModel model)
{
  // read model and save and return some JSON response
}

Simplemente puede construir el objeto javascript que coincida con la estructura del modelo de vista y publicarlo utilizando el servicio $http de angualr. No es necesario preocuparse por configurar Content-Type o Json encadenándolo. Angualr se encargará de eso.

var model={ User : {} ,Selections :[], Grid=[] };
model.User.Age =23;
model.User.UserName ="test";
model.User.Location="New York";

model.Selections.push("dy.txt");
model.Selections.push("some.txt");

model.Grid.push("session");
model.Grid.push("id");

var url="replcaeUrltoYourActionMethodHere";

$http.post(url, model)
.then(function(response)
{
  // do something with the response
  // var result= response.data
});
3
Shyju 10 dic. 2015 a las 22:08

¿Está utilizando WebApi o MVC en el servidor? Si es así, el enfoque más simple sería crear una clase que contenga las 3 entidades que necesita enviar y aprovechar el modelo-enlace

Entonces, en su ejemplo, enumera lo que parece ser un formulario de usuario, selecciones y cuadrículas. No estoy realmente seguro de cuáles son los dos últimos, pero un modelo de ejemplo podría verse así:

public class UserSubmissionViewModel
{
    public UserSubmissionViewModel() { }

    public UserFormModel User {get;set;}

    public SelectionsModel Selections { get; set; }

    public GridModel Grids { get; set; }
}

Luego, en su controlador de API web o su controlador MVC, tendría un método como este:

public async Task<IHttpActionResult> Submit(UserSubmissionViewModel model)

Y su javascript se parecería a algo parecido a esto:

var toSend = {"UserFormModel":data, "SelectionsModel":selections, "GridModel":grids};
$.ajax({
         type:"POST",
         data:toSend, //<--- you might need to JSON.stringify this, cant test this code at the moment
         url:serviceURL //<-- Calls your Submit method on the controller
    });
1
b0redom 10 dic. 2015 a las 20:01