Envío de varios elementos a MVC Controller a través de jQuery.Ajax

Si está serializando un formulario utilizando algo como jQuery, a menudo asignará las claves y valores JSON a las propiedades de un objeto en la Acción del controlador que está publicando. Asi que:

jQuery:

<code>function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data:  $('#form').serialize(),
        complete: callFunction
        }
    });
</code>

Suponiendo que los detalles principales contienen elementos que tendrán el nombre del parámetro como una clave que deben asignar al objeto directamente:

Acción:

<code>public void TestMVC(MyObject obj)
{
//Obj should now contain the data from the serialised form
}
</code>

ENVIAR:

<code>Name: "Bob"
Age: "999"
Sex: "Unknown"
</code>

¿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 un QueryString que podría contener cualquier número y tipo de pares clave / valor al 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:

<code>function PostForm() {

    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: 
        { 
           Obj: $('#form').serialize(),
           TheWeirdQueryString: $('.additionalParams').serialize(),
        }
    });
};
</code>

Acción:

<code>public void TestMVC(MyObject obj, String TheWeirdQueryString)
{
//Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQueryString works fine. 
}
</code>

Enviar:

<code>Obj: name=bob&age=999&sex="unknown"
TheWeirdQueryString: param1=1&param2=2
</code>

Creo que esto se debe a que, en realidad, he creado un objeto JSON como Datos y he establecido las propiedades al nombre del objeto.

Hay 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 con un QueryString (Foo=1&Bar=2) y MVC no puede asignar un QueryString a los miembros de un objeto (o eso parecería).

¿Hay algún tipo de trabajo para comenzar a trabajar como lo hace en primera instancia, pero también para enviar datos adicionales a un segundo argumento sobre la Acción? Supongo que es agregar una propiedad adicional a todas las existentes creadas cuando jquery realiza la serialización del formulario.

El POST que realmente quiero es:

<code>Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1&param2=2
</code>

Respuestas a la pregunta(3)

Su respuesta a la pregunta