2011-03-27 6 views
0

MVC3에서 ViewModel을 json에 바인딩하는 데 문제가 있습니다. 내 매우 간단한 코드는JsonValueProvider가 ASP.NET MVC3에서 작동하지 않습니다.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <% using (Html.BeginForm("Save", "Home")) {%>  
    <p> 
     Cat 
    </p> 
    <button id="clickMe" type="submit">Click Me</button> 
    <% } %>  

    <script type="text/javascript"> 
    $(function() { 
     $('form').submit(function() { 
     var cat = { 
      Age: 5, 
      Weight: 13.5, 
      Name: 'Fluffy' 
     }; 

     $.ajax({ 
      url: '/home/save', 
      type: 'post', 
      data: JSON.stringify(cat), 
      dataType: 'json', 
      contentType: 'application/json; charset=utf-8' 
     }); 

     console.info(JSON.stringify(cat)); 
     }); 
    }); 
    </script> 
</asp:Content> 

console.info 라인은 스크립트가 정확한 시간에 떨어져 발사되도록 파이어 버그 정보 창에서 인쇄 ... 다음과 같습니다. 뷰 모델은 다음과 같습니다 설정되지 않은 모든 속성 아래의 액션 메소드에 올 때 예상되는 JSON은

public class Cat 
{ 
    public int Age { get; set; } 
    public double Weight { get; set; } 
    public string Name { get; set; } 
} 

[HttpPost] 
public ActionResult Save(Cat form) 
{ 
    return View(); 
} 

내가 확인한 ..., ... 방화범 그러나

Source 
{"Age":5,"Weight":13.5,"Name":"Fluffy"} 

나타난다 앱이 시작될 때 JsonValueProviderFactory가 팩토리에 등록된다. 나는 여기에 믿을 수 없을 정도로 간단한 것을 놓쳤다 고 확신한다. 누군가 이것에 대해 어떤 생각을 밝힐 수 있을까?

미리 감사드립니다.

답변

2

이렇게하면됩니다. 그냥 기본 양식이 거짓 반환하여 제출 취소하는 것을 잊지 마세요 : 또한 당신이 그렇게 컨트롤러의 행동이 JSON 반환 있는지 확인 dataType: 'json'를 지정

$('form').submit(function() { 
    var cat = { 
     Age: 5, 
     Weight: 13.5, 
     Name: 'Fluffy' 
    }; 

    $.ajax({ 
     url: this.href, 
     type: this.method, 
     data: JSON.stringify(cat), 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8' 
    }); 

    return false; 
}); 

을 : 그것은

[HttpPost] 
public ActionResult Save(Cat form) 
{ 
    return Json(new { message = "success" }); 
} 
+0

했다! 나는 "return false;를 놓치고 있었다. 내 js의 끝에. 액션에서 JSON을 반환하는 팁을 주셔서 감사합니다. –

관련 문제