2012-11-14 3 views
1

asp.net mvc를 사용하고 있습니다.mvc 작업에 대한 ajax 호출의 빈 데이터

var specificData = { prop1: 'abc', prop2: [1,2,3] } 

    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     url: '/MyController/Create', 
     data: { myData: specificData }, //data contains the same attributes as MyData class 
     success: function (data, b,c,d) { 
      alert("success!"); 
     }, 
     error: function (data, b, c, d) { 
      alert('fail'); 
     } 
    }); 

문제는 만들기 작업을 내부의 "데이터"변수가 있다는 것이다 : 나는 이런 식으로 호출하고

public class MyData { 
    public string prop1 {get;set;} 
    public IEnumerable<int> prop2 {get;set;} 
} 

:

[HttpPost] 
public ActionResult Create(MyData myData) 
{ 
    .... // For some reason data is always empty. The attributes are all null 
} 

의 MyData이 : 나는이 작업을 인스턴스화되었지만 속성은 모두 null입니다. 내가 뭔가 잘못하고 있는거야?

UPDATE
는 @Rory McCrossan I에 따른 data: specificData를 사용하는 대신 data: { myData: specificData }하여 해결한다. 하지만 지금은 다른 곳에서이 문제가 있습니다.

var specificData = { prop1: 'abc', 
        prop2: [ 
         {name:'a'}, 
         {name:'b'}, 
         {name:'c'}] 
        }; 
: 지금은 좀 더 복잡한 클래스를 사용하고 있기 때문에의 MyData 클래스와 관련된 직렬화 문제 :

public class MyData { 
    public string prop1 {get;set;} 
    public IEnumerable<Person> prop2 {get;set;} 
} 

및 specificData이다 공용 클래스 사람 {} 를; 세트 공공 문자열 이름은 {얻을}

작업에서 myData.prop2.ElementAt (0) .name이 null입니다. 지금 무엇이 잘못 되었습니까?

+1

'데이터'변수의 내용을 게시 할 수 있습니까? 또한 MyData 클래스의 속성 목록이 도움이 될 것입니다. –

+0

문제는 변수 데이터를 사용하고 있다고 생각합니다. – Elby

+0

@Rory McCrossan : 코드를 업데이트했습니다. – Naor

답변

0

전송할 JS 개체를 만들 때 불필요한 myData 속성으로 속성을 래핑합니다. 이것을 시도하십시오 :

$.ajax({ 
    data: specificData 
    // other settins... 
}); 
+0

정말입니까? 지금까지 웹 서비스에서 myData 매개 변수가 필요한 경우 데이터가 {myData : {/ * data * /}} 여야합니다. 이것은 mvc와 다른가요? – Naor

+0

@Naor 초기 생각이 잘못되었습니다 - 답변을 업데이트했습니다. 이것은 당신을 위해 지금 작동해야합니다. –

+0

맞아, 이건 나를 위해 workd지만 복잡한 배열을 포함하는 클래스가 아닙니다. 배열은 요소를 반환하지만 요소는 채워지지 않습니다. 내 질문을 업데이트했습니다. 뭐가 잘못 되었 니? – Naor

관련 문제