2014-01-22 2 views
10

MVC 4에서 뷰의 JavaScript 배열을 AJAX를 사용하여 컨트롤러의 함수에 전달하는 방법은 무엇입니까?C# MVC 4 : 뷰에서 JavaScript 배열을 컨트롤러로 전달

이 일을하지 않는 것 :

$.ajax(
     { 
      type: "POST", 
      url: "../Home/SaveTable", 
      data: { function_param: countryArray } 
     }); 

문제는, countryArray는 자바 스크립트보기의 글로벌 배열이며 나는 그것을 통과되기 전에 그 요소를 가지고 있음을 확인했습니다. 그러나 saveTable 함수가 배열을 수신하면 함수는 null 문자열 [] 배열을 수신했다고 말합니다.

나는 단지 보기컨트롤러에서 배열을 전달, 당신은 return Json(data, JsonRequestBehavior.AllowGet); 복잡한 데이터 유형을 직렬화하고-드 직렬화는 "VAR"변수로 설정하여 것을 알고있다.

그래서 나는 이것을 위해해야 ​​할 것이지만 어떻게해야합니까?

편집 1 :

public string SaveTable(string[] function_param) 
{ 
    if (function_param != null && function_param > 0) 
    { 
     //some code     
     return "Success"; 
    } 

    //The following code will run if it's not successful. 
    return "There must be at least one country in the Region."; 
    //Yeah it's always returning this b/c function_param is null;   
} 
+2

컨트롤러는 어떻게 생겼습니까? –

+0

요청 페이로드를 확인하여 데이터가 실제로 컨트롤러로 전송되는지 확인하십시오. – Saravana

+0

@Mark 내 컨트롤러에는 데이터베이스에 액세스하는 데 사용되는 뷰와 메서드를 반환하는 ActionResult 메서드가 있습니다. 이것은 전달 된 배열에 따라 데이터베이스에 액세스하는 데 사용되는 함수입니다. – RedAces

답변

19

당신은 배열을 직렬화 할 때 traditional: true을 설정해야합니다 : 여기

는 SaveTable 함수의 단축 버전입니다.

$.ajax({ 
    type: "POST", 
    traditional: true, 
    url: "../Home/SaveTable", 
    data: { function_param: countryArray } 
}); 

는에이 좋은 설명을 찾을 수 traditional: true는 무엇을 : https://stackoverflow.com/a/5497151/2419531

편집 : 당신이 traditional: true를 사용하지 않을 경우

, 당신은 JSON.stringify를 사용하여 지정 문자열로 데이터를 전달할 수 있습니다 contentType :

$.ajax({ 
    type: "POST", 
    url: "../Home/SaveTable", 
    contentType: 'application/json', 
    data: JSON.stringify({function_param: countryArray}), 
}); 
+0

나는 당신의 연결 고리를 보았습니다. 그리고 거기에서의 대답은 전통적인 방법이 쓸데없고 새로운 방법이 더 낫다는 것을 암시합니다. 그렇다면 전통적인 배열을 직렬화 할 때 어떤 이점이 있습니까? – RedAces

+1

어쨌든 작동하지 않았습니다. 함수는 여전히 null 문자열 [] 배열을 얻고 있습니다. – RedAces

+0

업데이트 된 답변보기 – Saravana

2

컨트롤러에서 사용해야합니다.

public string SaveTable(object[] function_param) 
{ 
    //some code 
} 

향후 사용자를 위해 작업해야합니다.

+1

좋은 해결책, 고마워. – spadelives

0

당신의 아약스 : 컨트롤러에

$.ajax({ 
    type: "POST", 
    url: "../Home/SaveTable", 
    contentType: 'application/json', 
    data: {function_param: JSON.stringify(countryArray)}, 
}); 

:

using Newtonsoft.Json; 

    public string SaveTable(string function_param) 
    { 
     dynamic func_param = JsonConvert.DeserializeObject(function_param) 
    } 

다음 컨트롤러에서 foreach 문을 할 수있을 것입니다.

관련 문제