2012-07-30 211 views
0

我使用揭示模塊模式和敲除來綁定窗體。當以這種形式輸入數據(註冊)時,需要將其發回MVC4網絡方法。通過jQuery Ajax調用Web服務的參數調用

這裏是jQuery代碼

/* 
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 

    } 

當我試圖,捕獲數據(使用簡單的console.log)並驗證它在jslint.com,這是一個有效的Json。

  1. 我試圖硬編碼數據

    數據: 「{數據: '{\' 名稱\ ':\' 尼爾\ '}'}」, 但我仍得爲null,在我的網絡方法。

  2. 添加標記[System.Web.Script.Services.ScriptMethod(UseHttpGet = false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]我Post方法在控制,但是仍沒有成果而

  3. 偶試過JSON.Stringify data: JSON.stringify(data)但我仍然能在這個網絡的方法無效。

我無法找出解決方案。

類似的問題被發現@這個鏈接 http://forums.asp.net/t/1555940.aspx/1 甚至Passing parameter to WebMethod with jQuery Ajax 但並沒有幫助我:(

回答

0

MVC和的WebAPI使用的Model Binding概念。

所以最簡單的解決辦法是,你需要創建一個Model類,它匹配發送的Json數據的結構以接受服務器上的數據:

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 2012-07-30 09:18:10

0

才躲過了雙引號字符是允許的,不是單引號,所以你就必須用雙引號來代替單引號:

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

或者,如果你想使用字符串化功能,您可以使用它這樣:

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