2014-09-23 203 views
0

我終於嘗試使用KnockoutJS。我探索了將JSON數據發送到MVC 4中的C#方法的更短途徑,但最終使用了AJAX方法。我對以下內容有些困惑,並希望有人能夠提供幫助。將JSON作爲null傳遞給方法參數

的Javascript

var VM = function() { 
    var self = this; 
    self.ValidateAndCreate = function() { 
     console.log("entered"); 
     var a = { 
      b: "1", 
      c: "2", 
      d: { 
       e: "3" 
      } 
     }; 
     var input = { data: a } 
     console.log(JSON.stringify(input)); 
     $.ajax({ 
      url: '/McAfee/ValidateAndCreatePartner', 
      data: JSON.stringify(input), 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (result) { 
       console.log('success'); 
      } 
     }); 
    } 
} 
var viewModel = new VM(); 
ko.applyBindings(viewModel); 

C#

[HttpPost] 
    public void ValidateAndCreatePartner(string data) 
    { 
     var x = JsonConvert.DeserializeObject(data); 
     RedirectIfSuccess(); 
    } 

什麼目前發生的是ValidateAndCreatePartner火災,但參數data爲空,然後NewtonSoft.Json.JsonConvert.DeserializeObject沒有結果。我該如何解決這個問題?

+0

我還沒有超過一年使用JSON做任何事情,我還沒有到我的舊的源代碼訪問 - 我覺得我失去了一些東西根本 – Eon 2014-09-23 09:31:47

回答

1

MVC中的最簡單的方法是創建類,按您的數據:它是更乾淨!例如,你的榜樣,你可以試試這個:

[HttpPost] 
public ActionResult Test(TestClass data) { 
    RedirectIfSuccess(); 
} 


public class TestClass 
{ 
    public string b { get; set; } 
    public string c { get; set; } 
    public TestSubClass d { get; set; } 
} 

public class TestSubClass 
{ 
    public int e { get; set; } 
} 
+0

我是個白癡,如果你看到我最後的信息。它連載。非常感謝。 – Eon 2014-09-23 09:59:59

+0

不用擔心。偉大的,如果它的工作:-) – 2014-09-23 10:10:14

1

由於您的內容類型爲application/json,視圖函數的參數將自動反序列化(不再是字符串)。

創建服務器端的一個視圖模型匹配您發送的一個,並用它作爲視圖的類型參數:

public class D { 
    public string e {get;set;} 
} 

public class A { 
    public string b {get;set;} 
    public string c {get;set;} 
    public D d {get;set;} 
} 


[HttpPost] 
public void ValidateAndCreatePartner(A data) 
{ 
    // no need to deserialize data 
    RedirectIfSuccess(); 
} 
+0

老實說?太棒了。現在就試試這個吧 – Eon 2014-09-23 09:49:13

+0

正如我在回答中所提到的,你也可以用int類型映射你的整數(參見'e')。 – 2014-09-23 09:52:34

+0

無效的JSON基元:b。 這就是我得到的結果。有任何想法嗎? – Eon 2014-09-23 09:54:59

相關問題