jQuery.ajax를 통해 MVC 컨트롤러에 여러 항목을 전송합니다
-
05-07-2019 - |
문제
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¶m2=2
나는 이것이 실제로 데이터로 JSON 객체를 만들고 객체 이름으로 속성을 설정했기 때문이라고 생각합니다.
Firebug에 나타나는 게시물 값에는 차이가 있습니다. 객체를 단독으로 게시하면 게시물 값은 해당 값과 객체/형태의 모든 키입니다. 두 번째 예에는 두 가지 간단한 속성이 있습니다. 이름은 각각 쿼리 스트링을 포함합니다 (Foo=1&Bar=2
) 및 MVC는 쿼리 스트링을 객체 구성원에 매핑 할 수 없습니다 (또는 표시).
어쨌든 첫 번째 경우처럼 일을 할뿐만 아니라 행동에 대한 두 번째 인수에 추가 데이터를 보내는 것이 있습니까? jQuery가 양식의 직렬화를 할 때 생성 된 모든 기존의 속성에 추가 속성을 추가하는 것이 추측됩니다.
내가 실제로 원하는 게시물은 다음과 같습니다.
Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1¶m2=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" />