JSONデータ構造をMVC(3)コントローラーに渡し、JSONオブジェクトをすべてのプロパティがバインドされたC#オブジェクトに変換します。プロパティの1つは、単純なタイプです。それが基本的なモデルバインディングですよね?
これが私のモデルです:
public class Person
{
public string Name { get; set; }
public JobTitle JobTitle { get; set; }
}
public class JobTitle
{
public string Title { get; set; }
public bool IsSenior { get; set; }
}
これが私のIndex.cshtmlページです(「Person」クラスの構造に一致するJSONオブジェクトを渡してAJAXリクエストを作成します):
<div id="myDiv" style="border:1px solid #F00"></div>
<script type="text/javascript">
var person = {
Name: "Bob Smith",
JobTitle: {
Title: "Developer",
IsSenior: true
}
};
$.ajax({
url: "@Url.Action("ShowPerson", "Home")",
data: $.param(person),
success: function (response){
$("#myDiv").html(response);
},
error: function (xhr) {
$("#myDiv").html("<h1>FAIL</h1><p>" + xhr.statusText + "</p>");
}
});
</script>
そして、私のHomeControllerは次のようになります。
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult ShowPerson(Person person)
{
return View(person);
}
}
「ShowPerson.cshtml」ファイルは、必要になる前に問題が発生するため、今は無視してください。
HomeController.ShowPersonアクションでは、「person.Name」プロパティが正しくバインドされ、「person.JobTitle」オブジェクト(「Title」および「IsSenior」プロパティを含む)がインスタンス化されますが、デフォルト値は「Title=null」のままです。および「IsSenior=false」。
過去に問題なくネストされたモデルのバインドを行ったことがあると確信しています。私は何が欠けていますか?モデルバインディングが1レベルの深さでしか機能しないように見える理由を誰かが明らかにすることができますか?
私はSOを検索しましたが、フォームからデータを送信するときに他のすべての人がバインディングの問題を抱えているようです。そのため、$。ajax()リクエストに何かが欠けている可能性がありますか?