Sende flere elementer til MVC Controller via jQuery.Ajax

stemmer
6

Hvis youa er serieomkoding en form ved hjelp av noe som jQuery, vil det ofte kartlegge JSON nøkler og verdier til egenskapene til et objekt på Controller Handling du legger til. Så:

jQuery:

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

Forutsatt viktigste detaljene inneholder elementer som vil ha navnet på parameteren som en nøkkel de skal kartlegge til objektet direkte:

Handling:

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

POST:

Name: Bob
Age: 999
Sex: Unknown

Er det noen som vet hvordan dette fungerer? Det er å bryte hver gang jeg passerer form og eventuelle tilleggsdata til kontrolleren.

Jeg ønsker å sende innholdet i dataene, så vel som en QueryString som kan inneholde et hvilket som helst antall og typer av nøkkel / verdi-par til kontrolleren. Jeg kan utvinne disse nøkkel / verdipar som på tjeneren siden jeg ikke kan skape et objekt for dem på metoden signatur. Men klarer dette til å fungere etter hensikten.

jQuery:

function PostForm() {

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

Handling:

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

Jeg tror dette er fordi jeg har faktisk opprettet en JSON objekt som data og angi egenskapene til navnet på objektet.

Det er en forskjell i posten verdiene som vises i Firebug. Når jeg legge gjenstanden alene, POST-verdiene er alle nøklene til objektet / skjema med de tilsvarende verdier. I det andre eksemplet er det to enkle egenskaper, Navnet ga jeg dem, som hver inneholder en QueryString ( Foo=1&Bar=2) og MVC kan ikke tilordne en QueryString til medlemmer av et objekt (eller slik det ville se ut).

Er det allikevel i det hele tatt å få til å fungere som det gjør i første omgang, men også til å sende ytterligere informasjon til en andre argument på handling? Jeg gjetter det er å legge en ekstra eiendom til alle de eksisterende opprettet da jquery gjør serialisering av skjemaet.

POST jeg faktisk ønsker er:

Name: Bob
Age: 999
Sex: Unknown
TheWeirdQueryString: param1=1&param2=2
Publisert på 16/06/2009 klokken 15:17
kilden bruker
På andre språk...                            


3 svar

stemmer
5

datatype parameter i $ .ajax metoden er den type respons (den typen data som du forventer tilbake fra serveren), ikke be om. Prøv dette i stedet:

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

eller:

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

OPPDATERT:

Prøv dette:

Controller:

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

Klient:

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

men på klientsiden din flere parametere må være i følgende format:

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

så $ ('. additionalParams') elementer må ha "id" og / eller "navn" attributter som: TheWeirdQueryString [1], TheWeirdQueryString [2] ... TheWeirdQueryString [N]

Håper dette hjelper

Svarte 16/06/2009 kl. 15:27
kilden bruker

stemmer
0

Data er et formål

...
data: { 
    x :$('#form').serialize(), 
    y:'something else'
}
...
Svarte 16/06/2009 kl. 15:49
kilden bruker

stemmer
0

En annen løsning hvis du ønsker en ordbok med nøkkel / verdi-par:

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

Klient:

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

$ (' AdditionalParams.) Serial () 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

OPPDATERT:

Du trenger noe som dette:

<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" />
Svarte 16/06/2009 kl. 16:56
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more