Frage

Wenn youa ist eine Form der Serialisierung so etwas wie jQuery verwendet, wird es oft ordnen Sie den JSON-Schlüssel und Werte zu den Eigenschaften eines Objekts auf der Controller-Aktion, die Sie eine Mitteilung verfassen. Also:

jQuery:

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

Haupt Details Vorausgesetzt enthält Elemente, die den Namen des Parameters als Schlüssel haben sie auf das Objekt abbilden sollten direkt an:

Aktion:

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

POST:

Name: "Bob"
Age: "999"
Sex: "Unknown"

Wer weiß, wie das funktioniert? Es ist jedes Mal zu brechen ich die Form und alle zusätzlichen Daten übergeben an die Steuerung.

Ich möchte den Inhalt der Daten senden sowie eine Abfrage-Zeichenfolge, die eine beliebige Anzahl und Arten von Schlüssel / Wert-Paare an den Controller enthalten könnten. Ich kann diese Schlüssel / Wert-Paare auf dem Server extrahieren, da ich nicht ein Objekt für sie auf der Methodensignatur erzeugen. Allerdings versagt diese wie beabsichtigt arbeitet.

jQuery:

function PostForm() {

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

Aktion:

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

Post:

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

Ich denke, das ist, weil ich eigentlich ein JSON-Objekt als Daten und legen Sie die Eigenschaften auf den Namen des Objekts erstellt haben.

Es gibt einen Unterschied in den POST-Werte, die in Firebug erscheinen. Wenn ich das Objekt allein zu veröffentlichen, sind die POST-Werte alle Schlüssel des Objekts / Form mit den entsprechenden Werten. Im zweiten Beispiel gibt es zwei einfache Eigenschaften, Der Name gab ich ihnen, die jeweils eine Abfrage-Zeichenfolge (Foo=1&Bar=2) und MVC enthält keine Abfrage-Zeichenfolge an die Mitglieder eines Objekts abbilden kann (oder so scheint es).

Gibt es überhaupt irgendwie zu erhalten zu arbeiten, wie es in der ersten Instanz der Fall ist, sondern auch zusätzliche Daten zu einem zweiten Argument der Aktion zu senden? Ich vermute, es eine zusätzliche Eigenschaft für alle bestehende erstellt hinzuzufügen ist, wenn Jquery die Serialisierung der Form der Fall ist.

Die POST ich eigentlich will, ist:

Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1&param2=2
War es hilfreich?

Lösung

Parameter Datentyp in $ Schnipsel-Methode ist die Art der Reaktion (die Art der Daten, die Sie vom Server erwarten sind zurück), nicht zu verlangen. Versuchen Sie stattdessen:

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

oder:

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

AKTUALISIERT:

Versuchen Sie folgendes:

Controller:

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

Client:

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

aber auf Client-Seite Ihre zusätzliche params in folgendem Format sein müssen:

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

so $ (‘. AdditionalParams') Elemente müssen "id" und / oder "name" Attribute wie: TheWeirdQueryString [1], TheWeirdQueryString [2] ... TheWeirdQueryString [N]

Hope, das hilft

Andere Tipps

Daten ist eine Aufgabe

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

Eine andere Lösung, wenn Sie ein Wörterbuch von Schlüssel / Wert-Paare wollen:

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

Client:

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

$ (‘additionalParams.) Serialisiert () Format:.

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

AKTUALISIERT:

Sie brauchen so etwas wie folgt aus:

<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" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top