MVC4では、JavaScriptオブジェクトをAJAXのC#コントローラーにどのように渡しますか?最後にこれを試しましたが、うまくいきませんでした。
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を変更しようとしましたが、まだ機能しません。私の間違いはどこですか?いくつかの投稿を見つけましたが、間違ったことは見つかりませんでした。
どうもありがとう。
Propr1
およびPropr2
はjavascriptオブジェクトですが、C#モデルではProp1
およびProp2
(「r」がない)。stringify
しないでください。また、dataType
をjson
に設定しないでください。 MVCは、コードでjsonシリアル化を行わなくても、postパラメーターのコレクションを使用して問題なく解析できます。contentType
を省略します。これは必要ありません。 WebAPIはこれを自動検出する必要があります。あなたはそれを残すことができますが、それは無関係です。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; }
}
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; }
}