문제

youa가 jQuery와 같은 것을 사용하여 양식을 직렬화하는 경우, 종종 JSON 키와 값을 게시하는 컨트롤러 동작의 객체의 속성에 매핑합니다. 그래서:

jQuery :

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

기본 세부 사항에 따라 매개 변수의 이름을 키우는 요소가 포함되어 있습니다.

동작:

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

게시하다:

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

이것이 어떻게 작동하는지 아는 사람이 있습니까? 양식을 통과 할 때마다 깨지고 있습니다 그리고 추가 데이터 컨트롤러에.

컨트롤러에 키/값 쌍의 숫자와 유형을 포함 할 수있는 쿼리 스트링뿐만 아니라 데이터 내용을 보내고 싶습니다. 메소드 서명에서 객체를 만들 수 없으므로 서버에서 이러한 키/값 쌍을 추출 할 수 있습니다. 그러나 이것은 의도 한대로 작동하지 않습니다.

jQuery :

function PostForm() {

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

동작:

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

게시하다:

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

나는 이것이 실제로 데이터로 JSON 객체를 만들고 객체 이름으로 속성을 설정했기 때문이라고 생각합니다.

Firebug에 나타나는 게시물 값에는 차이가 있습니다. 객체를 단독으로 게시하면 게시물 값은 해당 값과 객체/형태의 모든 키입니다. 두 번째 예에는 두 가지 간단한 속성이 있습니다. 이름은 각각 쿼리 스트링을 포함합니다 (Foo=1&Bar=2) 및 MVC는 쿼리 스트링을 객체 구성원에 매핑 할 수 없습니다 (또는 표시).

어쨌든 첫 번째 경우처럼 일을 할뿐만 아니라 행동에 대한 두 번째 인수에 추가 데이터를 보내는 것이 있습니까? jQuery가 양식의 직렬화를 할 때 생성 된 모든 기존의 속성에 추가 속성을 추가하는 것이 추측됩니다.

내가 실제로 원하는 게시물은 다음과 같습니다.

Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1&param2=2
도움이 되었습니까?

해결책

$ .ajax 메소드의 Datatype 매개 변수는 요청이 아닌 응답 유형 (서버에서 기대하는 데이터 유형)입니다. 대신 시도해보십시오.

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

또는:

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

업데이트 :

이 시도:

제어 장치:

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

고객:

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

그러나 클라이언트 측에서는 추가 매개 변수가 다음 형식이어야합니다.

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

따라서 $ ( '. additionalparams') 요소는 "ID"및/또는 "이름"속성이 있어야합니다 : theWirdQueryString [1], theWirdQueryString [2] ... TheWeirdQueryString [n

도움이 되었기를 바랍니다

다른 팁

데이터는 객체입니다

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

키/값 쌍 사전을 원하는 경우 다른 솔루션 :

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

고객:

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

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

업데이트 :

다음과 같은 것이 필요합니다.

<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" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top