2012-07-30 3 views
0

드러밍 모듈 패턴과 녹아웃을 사용하여 양식을 바인딩합니다. 해당 양식 (등록)으로 데이터를 입력하면 MVC4 웹 메소드에 다시 게시해야합니다. 여기 Jquery Ajax를 통한 웹 서비스 매개 변수

은 (단순 CONSOLE.LOG 사용) 데이터를 캡처하고이를 검증, 내가하려고하면

/* 
Requires JQuery 
Requires Knockout 
*/ 
op.TestCall = function() { 

    // Private Area 
    var _tmpl = { load: "Loading", form: "RegisterForm"}; 

    var 
    title = ko.observable(null) 
    template = ko.observable(_tmpl.load), 
    msg = ko.observable(), 

    postData = ko.observable(), 

    PostRegistration = function() { 
     console.log("Ajax Call Start"); 
     var test = GetPostData(); 
     $.ajax({ 

      type: "POST", 
      url: obj.postURL, //Your URL here api/registration 
      data: GetPostData(), 
      dataType: "json", 
      traditional: true, 
      contentType: 'application/json; charset=utf-8' 


     }).done(Success).fail(Failure); 
     console.log("Ajax Call End"); 
    }, 
    GetPostData = function() { 
     var postData = JSON.stringify({ 
      dummyText1: dummyText1(), 
      dummyText2: dummyText2(), 

     }); 
     return postData; 

    } 


    return { 
     // Public Area 
     title: title, 
     template: template, 
     dummyText1: dummyText1, 
     dummyText2: dummyText2 
    }; 
}(); 

컨트롤러 코드가

// POST api/registration 
    public void Post(string data) 
    { 

     ///TODO 

    } 

지금에 따라 간단 JQuery와 코드 jslint.com에서는 유효한 Json입니다.

  1. 나는

    데이터로 데이터를 하드 코딩하는 시도 : "{데이터 : '{\'이름 \ '\'니얼 \ '}'}", 는하지만 여전히 난에, null를 얻을 내 웹 방법.

  2. 추가 내 포스트가 제어의 방법,하지만 여전히 유익한 결과

  3. 에도 JSON.Stringify data: JSON.stringify(data) 시도

    하지만 여전히 나는 내 웹 메소드에 null을 얻을 수있는 태그 [System.Web.Script.Services.ScriptMethod(UseHttpGet = false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)].

해결 방법을 찾을 수 없습니다.

비슷한 문제가이 링크 @ 발견 된 http://forums.asp.net/t/1555940.aspx/1Passing parameter to WebMethod with jQuery Ajax는 하지만 나에게 도움이되지 않았다 :(

답변

0
는 MVC와 WebApi이 Model Binding의 개념.

를 사용

그래서 가장 쉬운 해결책은 당신이 필요 서버의 데이터를 수락하기 위해 보낸 Json 데이터의 구조와 일치하는 Model 클래스를 만듭니다.

public void Post(MyModel model) 
{ 
    ///TODO 
} 

public class MyModel 
{ 
    public string DummyText1 { get; set; } 

    public string DummyText1 { get; set; } 
} 

참고 : json 및 C# 속성 이름이 일치해야합니다.

+0

나는 그 접근법으로 할 수 없다. 나는 JSON.stringify를 사용하여 원하는 것을 얻을 필요가있다. 나는 내 질문을 조금 업데이트했다. 대답 해줘서 고마워. :) – Shubh

0

따옴표 문자가 허용됩니다 만 탈출하지 작은 따옴표, 당신은 단지 큰 따옴표와 작은 따옴표를 교체해야하므로 :

data: "{data: '{\"name\":\"niall\"}'}" 

또는 당신이 캐릭터 라인 화 기능을 사용하려면 당신이 그것을 사용할 수 있습니다 이 방법은 :

data: "{data: '" + JSON.stringify(data) + "'}"