2011-04-11 4 views
0

페이지로드 나는 JSONObj이어야하는 Model에 String을 가지고 있습니다.MVC3 Ajax MVC3에서 문자열을 가져와 다시 게시

<script>var jsModel = eval('@Model.jsonModel'); 

var jsonModel = $.toJSON(jsModel); 
$.ajax({ 
     url: 'Page/SetJSON/', 
     type: "POST", 
     data: jsonModel, 
     datatype: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function() { 
      $('#test').html('Saved').fadeIn(), 
     }, 
     error: function() { 
      $("#test").html("error"), 
     } 
     });</script> 

그러나 컨트롤러는 null 객체를 가져옵니다

private string CreateJSONObj(Model model) 
{ return "{ name: 'test', Items: [{ test: 1 }, { test: 2 }]"; } 

Model.jsonModel = CreateJSONObj(model); 

지금 난 내 페이지를 구현하고자합니다. 스크립트에 jsonstring을 쓰면 아무 문제가 없습니다.

평가판을 사용해야합니까? 그러나 var jsModel = eval ('@ Model.jsonModel'); 아무 효과가 없다. 뭐가 잘못 되었 니? :-)

답변

5

모델에 메서드 또는 jsonModel 속성을 사용할 필요가 없습니다. 이 성공적으로 다음 컨트롤러 액션에 모델을 보내드립니다

<script type="text/javascript"> 
    var jsModel = @Html.Raw(new JavaScriptSerializer().Serialize(Model)); 
    $.ajax({ 
     url: '@Url.Action("SetJSON", "Page")', 
     type: 'POST', 
     data: JSON.stringify(jsModel), 
     contentType: 'application/json; charset=utf-8', 
     success: function() { 
      $('#test').html('Saved').fadeIn(); 
     }, 
     error: function() { 
      $('#test').html('error'); 
     } 
    }); 
</script> 

:

뷰에서 사용하기 위해 당신은 단순히 자바 스크립트 객체로 서버 측 모델 개체를 변환 할 JavaScriptSerializer 클래스를 사용할 수 있습니다

public class Model 
{ 
    public string Name { get; set; } 
    public IEnumerable<Item> Items { get; set; } 
} 

public class Item 
{ 
    public int Test { get; set; } 
} 

및 컨트롤러 : 다음 Model 클래스는 필요한 모든 정보를 포함

[HttpPost] 
public ActionResult SetJSON(Model model) 
{ 
    ... 
} 

public class PageController: Controller 
{ 
    // Used to render the view 
    public class Index() 
    { 
     var model = new Model 
     { 
      Name = "Test", 
      Items = new[] 
      { 
       new Item { Test = 1 }, 
       new Item { Test = 2 }, 
      } 
     };  
     return View(model); 
    } 

    // Used to handle the AJAX POST request 
    [HttpPost] 
    public ActionResult SetJSON(Model model) 
    { 
     ... 
    } 
} 
+0

니스,이 도움 주셔서 감사합니다. – Sand