Wysyłanie wielu elementów do kontrolera MVC za pośrednictwem jQuery.Ajax

Jeśli serializujesz formularz za pomocą czegoś takiego jak jQuery, często mapuje on klucze JSON i wartości do właściwości obiektu w akcji kontrolowanej, do której piszesz. Więc:

jQuery:

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

Zakładając, że główne szczegóły zawierają elementy, które będą miały nazwę parametru jako klucz, należy je bezpośrednio odwzorować na obiekt:

Akcja:

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

SŁUPEK:

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

Czy ktoś wie, jak to działa? Łamie się za każdym razem, gdy podaję formularzi wszelkie dodatkowe dane do kontrolera.

Chciałbym wysłać zawartość danych, a także QueryString, który mógłby zawierać dowolną liczbę i typy par klucz / wartość do kontrolera. Mogę wyodrębnić te pary klucz / wartość na serwerze, ponieważ nie mogę utworzyć dla nich obiektu w sygnaturze metody. Jednak to nie działa zgodnie z przeznaczeniem.

jQuery:

<code>function PostForm() {

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

Akcja:

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

Słupek:

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

Myślę, że dzieje się tak dlatego, że faktycznie stworzyłem obiekt JSON jako Data i ustawiłem właściwości na nazwę obiektu.

Istnieje różnica w wartościach POST pojawiających się w Firebug. Gdy publikuję obiekt sam, wartości POST są kluczami obiektu / formularza z odpowiadającymi im wartościami. W drugim przykładzie istnieją dwie proste właściwości, Nazwa, którą podałem, każda zawierająca QueryString (Foo=1&Bar=2), a MVC nie może odwzorować QueryString na członków obiektu (lub tak by się nie pojawiło).

Czy w ogóle istnieje możliwość pracy w taki sam sposób, jak w pierwszym przypadku, ale także wysłania dodatkowych danych do drugiego argumentu akcji? Zgaduję, że należy dodać dodatkową właściwość do wszystkich istniejących utworzonych, gdy jquery wykonuje serializację formularza.

POST, którego faktycznie chcę, to:

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

questionAnswers(3)

yourAnswerToTheQuestion