2015-01-07 7 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; } 
    } 

私のパラメータは常にnullです。 contentTypeを変更しようとしましたが、それでも動作しません。 私の間違いはどこですか?私はいくつかの記事を見つけましたが、私が間違っていたものは見つかりませんでした。

ありがとうございます。

+0

[http://msdn.microsoft.com/en-us/magazine/hh781022.aspx](model binding)は、b asics – ManirajSS

答えて

20
  1. javascriptとC#モデルのプロパティ名が一致していることを確認してください。あなたの質問では、Propr1Propr2のjavascriptオブジェクトがありましたが、C#モデルではProp1Prop2( "r"がありません)がありました。
  2. データを送信する前にデータをstringifyに入れないでください。dataTypejsonに設定しないでください。 MVCは、あなたのコードでjsonのシリアル化をせずに、ポストパラメータのコレクションでうまく解析することができます。
  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はWeb APIではなく、MVC 4を使用しています。 –

+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; } 
} 
関連する問題