2016-11-18 6 views
0

jquery에서 ajax 호출을 사용하여 MVC 컨트롤러에 데이터를 게시 할 계획입니다. JSON.stringify()를 사용하여 json 객체의 문자열을 컨트롤러에 전달하려고하지만 계속해서 400 개의 잘못된 요청을 받고 있습니다. 문자열 json 객체를 보내는 것이 나쁜 방법입니까? 또는 viewmodel을 사용해야합니까?jquery에 대한 잘못된 요청 Ajax가 문자열 화 된 json 데이터를 MVC 작업에 게시하는 중

내 MVC에서의 동작은 다음과 같이 문자열 값을 매개 변수로 허용합니다.

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Create(string values) 
    { 

     .. do some actions here ... 

     return View("Customer"); 
    } 

내 Ajax 호출은 아래와 같습니다.

$("#customer-add-btn").click(function() { 

      var data = $('#customer-add-form').serializeArray(); 
      console.log(data); 

      var values = JSON.stringify(data); 

      console.log(values); 


      $.ajax({ 
       url: 'Customer/Create', 
       data: values, 
       type: "POST", 
       dataType: "json", 
       data: values, 
       success: function (result) { 
        console.log('success');// do something on success 
       }, 
       error: function() { 
        console.log('error');// do something on error 
       } 
      }); 
     }); 

여기에는 문자열 형식 값의 샘플이 나와 있습니다.

$.ajax({ 
       type: "POST", 
       url: '@Html.Raw(Url.Action("Create", "Customer"))', 
       data: { values: JSON.stringify(values) }, 
       dataType: "json", 
       success: function (result) { 
        console.log('success');// do something on success 
       }, 
       error: function() { 
        console.log('error');// do something on error 
       } 
      }); 

및 모델과 바인딩하는 컨트롤러를 직렬화 :

[ {"name":"business_name","value":"adsf"},{"name":"business_phone_number","value":"124"},{"name":"business_contact_number","value":""} ] 
+0

는'제거 시도입니다 ValidateAntiForgeryToken'에서'ActionMeth od'와'param'은'ajax'를 통해 전달되는'string'이 아닙니다. 키 값 쌍으로 수신하거나 키 값 쌍 클래스로 정의 해보십시오. –

답변

0

이 사용할 수

var model = new List<ValuesModel>(); 
       //JavaScript Serializer to bind with Model 
       JavaScriptSerializer jsSerializer = new JavaScriptSerializer(new SimpleTypeResolver()); 
       model = jsSerializer.Deserialize<List<ValuesModel>>(values); 

ValuesModel

public class ValuesModel 
    { 
     public ValuesModel() 
     { 
     } 
     public string name { get; set; } 
     public string values { get; set; } 
    } 
+0

감사합니다. 정말 좋은 생각입니다. 어떤 행동 방법이 어떻게 생겼는지 정의 할 수있게 도와 주시겠습니까? 나는 위의 코드로 시도했지만 여전히 나쁜 요청을 받고있다. – superted

+0

당신이 작업 비동기'공공 사용할 필요가 (문자열 값)'만들고'ValidateAntiForgeryToken' – RonyLoud

+0

을 제거 또한 사용할 수 있습니다'[HttpPost] 공공 작업이 (목록 값) 만들기 비동기 { // 무언가를하십시오 *** 반환 전망 ("고객"); }' – RonyLoud