Si está serializando un formulario usando algo como jQuery, a menudo asignará las claves JSON y los valores a las propiedades de un objeto en la acción del controlador en la que está publicando. Por lo tanto:Envío de varios elementos al controlador MVC a través de jQuery.Ajax
jQuery:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize(),
complete: callFunction
}
});
Suponiendo principales datos contiene elementos que tendrá el nombre del parámetro como una clave que se deben asignar al objeto directamente:
Acción:
public void TestMVC(MyObject obj)
{
//Obj should now contain the data from the serialised form
}
POST:
Name: "Bob"
Age: "999"
Sex: "Unknown"
¿Alguien sabe cómo funciona esto? Se está rompiendo cada vez que paso el formulario y cualquier dato adicional al controlador.
Me gustaría enviar el contenido de los datos, así como una QueryString que podría contener cualquier número y tipo de pares clave/valor para el controlador. Puedo extraer estos pares clave/valor en el servidor ya que no puedo crear un objeto para ellos en la firma del método. Sin embargo, esto no funciona como se esperaba.
jQuery:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data:
{
Obj: $('#form').serialize(),
TheWeirdQueryString: $('.additionalParams').serialize(),
}
});
};
Acción:
public void TestMVC(MyObject obj, String TheWeirdQueryString)
{
//Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQueryString works fine.
}
la publicación:
Obj: name=bob&age=999&sex="unknown"
TheWeirdQueryString: param1=1¶m2=2
creo que esto se debe a que en realidad he creado un objeto JSON como el de datos y establecer las propiedades al nombre del objeto.
Existe una diferencia en los valores POST que aparecen en Firebug. Cuando publico el objeto solo, los valores POST son todas las claves del objeto/formulario con sus valores correspondientes. En el segundo ejemplo, hay dos propiedades simples, El nombre que les di, cada una conteniendo una QueryString (Foo=1&Bar=2
) y MVC no puede asignar una QueryString a los miembros de un objeto (o eso parecería).
¿Hay alguna manera de ponerse a trabajar como lo hace en la primera instancia, pero también para enviar datos adicionales a un segundo argumento en la Acción? Supongo que es para agregar una propiedad adicional a todas las existentes creadas cuando jquery realiza la serialización del formulario.
El POST realmente quiero es:
Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1¶m2=2
Se puede publicar los valores posteriores que estamos viendo para ambos escenarios? No entiendo muy bien tu descripción. –
Hecho. El último ejemplo es el mensaje que estoy tratando de hacer. – Damien