2012-03-02 5 views
2

가능한 중복 :MVC 3 사용자 정의 JS 객체를 컨트롤러에 전달하는 방법은 무엇입니까?

public class MyClass 
{ 
    public int BookID { get; set; } 

    public List<SelectedBookFormat> SelectedFormats { get; set; } 

    public SelectedBasketBook() 
    { 
     SelectedFormats = new List<SelectedBookFormat>(); 
    } 
} 

public class SelectedBookFormat 
{ 
    public int ID { get; set; } 
    public int Quantity { get; set; } 
    public double Price { get; set; } 
} 

및 조치 : : 그 클래스가
Passing a collection of objects to MVC controller using $.post

public JsonResult Add(MyClass model) 
{ 
... 
} 

내가 원하는 클라이언트 측에서 클래스를 생성 후 :

model {"BookID":"1","SelectedFormats":[{"ID":"4","Quantity":"34","Price":"44"},{"ID":"1","Quantity":"1","Price":"11"}]} 

JS (I는 그 클래스 오브젝트를 생성하고 I이 작업은 JSON.stringify() 메소드를 사용하여)

$.post('/Add', { 
       model : JSON.stringify({ BookID: '@Model.BookID', 
             SelectedFormats : formatsTab }) }, 
     function(res){} 
       }); 

하지만 전달 개체 서버 측에서 null 인 이유는 무엇입니까?

답변

3
var data = {}; 
data.BookId = 4; 

var format = { }; 
format.ID = 3; 
format.Quantity = 4; 
format.Price = 2.2; 

data.SelectedFormats = []; 
data.SelectedFormats.push(format); 

return $.ajax({ 
    type: 'POST', 
    url: 'YourController/YourAction', 
    dataType: 'json', 
    traditional: true, 
    data: { 
     model: data 
    } 
}); 

저에게는 구원자가 traditional: true입니다.

ps. 서버 측에서는 속성이 필요하지 않으므로 필드로 변경할 수 있으므로 소문자로 작성할 수 있습니다. 그런 다음 JS 스타일을 작성하고 서버 측에서는 여전히 유효합니다. 이것은 물론 맛의 문제입니다.

+0

흠 'BookID'는 제대로 전달되지만 그 목록에는 0 개의 항목 수가 있습니다. 'MyClass'를'List '에서'SelectedBookFormat []'로 변경하면 null입니다. – Tony

관련 문제