Pregunta

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. Entonces:

jQuery:

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

Suponiendo que los detalles principales contienen elementos que tendrán el nombre del parámetro como clave que 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 un QueryString que podría contener cualquier número y tipo de pares de 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:

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. 
}

Publicación:

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

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 & amp; Bar = 2 ) y MVC no puede asignar un QueryString a los miembros de un objeto (o por lo que parecería).

¿Hay alguna forma de trabajar como en la 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:

Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1&param2=2
¿Fue útil?

Solución

El parámetro dataType en el método $ .ajax es el tipo de respuesta (el tipo de datos que espera recibir del servidor), no la solicitud. Intenta esto en su lugar:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

o:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(),
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize()
    });
};

ACTUALIZADO:

Prueba esto:

Controlador:

public void TestMVC(MyObject obj, String[] TheWeirdQueryString)
{
}

Cliente:

TheWeirdQueryString[0]=param1&TheWeirdQueryString[1]=param2&...&TheWeirdQueryString[n]=paramN

pero en el lado del cliente, sus parámetros adicionales deben estar en el siguiente formato:

<*> Los elementos de

so $ ('. additionalParams') deben tener " id " y / o " nombre " atributos como: TheWeirdQueryString [1], TheWeirdQueryString [2] ... TheWeirdQueryString [N]

Espero que esto ayude

Otros consejos

Los datos son un objeto

...
data: { 
    x :$('#form').serialize(), 
    y:'something else'
}
...

Otra solución si desea un diccionario de pares clave / valor:

public void TestMVC(MyObject obj, IDictionary<string, object> TheWeirdQueryString)
{
}

Cliente:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

$ ('. additionalParams'). Formato serialize ():

TheWeirdQueryString[0].Key=param0&TheWeirdQueryString[0].Value=value0&TheWeirdQueryString[1].Key=param1&TheWeirdQueryString[1].Value=value1&...&TheWeirdQueryString[n].Key=paramN&TheWeirdQueryString[n].Value=valueN

ACTUALIZADO:

Necesitas algo como esto:

<input class="additionalParams" type="text" name="TheWeirdQueryString[0].Key" value="param0" />
<input class="additionalParams"type="text" name="TheWeirdQueryString[0].Value" value="value0" />
<!-- ... -->
<input class="additionalParams"type="text" name="TheWeirdQueryString[n].Key" value="paramN" />
<input class="additionalParams"type="text" name="TheWeirdQueryString[n].Value" value="valueN" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top