2015-01-07 145 views
8

在MVC4中,如何將JavaScript對象傳遞給AJAX中的C#控制器? 最後我試了一下,但沒有奏效。如何將JavaScript對象傳遞給C#MVC 4控制器

JavaScript客戶端:

var myData = {Propr1: '', Propr2: ''}; 
    $.ajax({ 
     type: 'POST', 
     data: JSON.stringify(myData), 
     url: '/Home/SubmitMyData', 
     contentType: 'application/json', 
     dataType: 'json', 
     success: alert('Youhou'), 
     error: alert('not good') 
    }); 

C#服務器端的方法:

public ActionResult SubmitMyData(MyParamModel myParam) 
    { 
     // Do my stuff here with my parameter 
     return View(); 
    } 

    public class MyParamModel 
    { 
     string Prop1 { get; set; } 
     string Prop2 { get; set; } 
    } 

我的參數始終是零。我試圖改變contentType,但它仍然不起作用。 我的錯誤在哪裏?我發現了一些帖子,但我沒有找到我做錯了什麼。

非常感謝。

+0

[http://msdn.microsoft.com/en-us/magazine/hh781022.aspx](model binding)將有助於瞭解b asics – ManirajSS

回答

20
  1. 確保javascript和C#模型之間的屬性名稱匹配。在你的問題中,你的javascript對象有Propr1Propr2,但是在C#模型中,你有Prop1Prop2(缺少「r」)。
  2. 發送數據前不要將數據發送到stringify,也不要將dataType設置爲json。 MVC可以在你的代碼中沒有json序列化的情況下使用post參數的集合進行解析。
  3. 省略contentType,這是沒有必要的。 WebAPI應該自動檢測這個。你可以離開它,但它是無關的。
  4. 確保模型屬性是公開的。

JavaScript客戶端:

var myData = {Prop1: '', Prop2: ''}; // #1 
    $.ajax({ 
     type: 'POST', 
     data: myData, // #2 
     url: '/Home/SubmitMyData', 
     //contentType: 'application/json', #3 
     //dataType: 'json', #2 
     success: alert('Youhou'), 
     error: alert('not good') 
    }); 

C#服務器端的方法:

public ActionResult SubmitMyData(MyParamModel myParam) 
    { 
     // Do my stuff here with my parameter 
     return View(); 
    } 

    public class MyParamModel // #4 
    { 
     public string Prop1 { get; set; } 
     public string Prop2 { get; set; } 
    } 
+0

你可以發佈一個小錯誤,解釋爲什麼你的代碼有效嗎? – WindRaven

+0

我不認爲這裏適合使用FromBody屬性。 OP使用的是MVC 4,而不是Web API。 –

+0

@DavidL感謝您指出這一點,我認爲這是一個WebAPI問題,由於標題。 – danludwig

1

傳入的data屬性的值應該是一個對象,而不是字符串:

data: myData, 

屬性名稱需要匹配:

var myData = { Prop1: '', Prop2: ''}; 

您需要使用[FromBody]屬性上的參數值:

public ActionResult SubmitMyData([FromBody] MyParamModel myParam) 

,並在模型類型的屬性必須public

public class MyParamModel 
{ 
    public string Prop1 { get; set; } 
    public string Prop2 { get; set; } 
} 
相關問題