MVC3 でのモデル バインディングを理解しようとしています。この例を見てください。
コントローラーのコードは次のとおりです。
public ActionResult Index()
{
Person person = new Person{ Name = "Test" };
return View(person);
}
[HttpPost]
public string Edit(Person personModel)
{
return string.Format("From server: {0}", personModel.Name);
}
そして、ここに html/javascript ビットがあります:
@model MCV3.Test.Models.Person
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
$(document).ready(function (){
var model = @Html.Raw(Json.Encode(Model));
$.ajax({
url : "/Person/Edit",
type: "Post",
datatype: "json",
data : model,
success: function (data) {
$("#result").text(data);
}
});
});
</script>
</head>
<body>
<label id="result"></label>
</body>
</html>
上記のコードは機能しますが、ajax 呼び出しのデータ設定をこれに変更すると、次のようになります。
$.ajax({
url : "/Person/Edit",
type: "Post",
datatype: "json",
data : {personModel : model},
success: function (data) {
$("#result").text(data);
}
});
モデルは正しいタイプですが、name プロパティは null です。
動作する例では、投稿パラメーターは次のとおりです。
Name Test
Name=Test
しかし、うまくいかない例では、それらは次のとおりです。
personModel[Name] Test
personModel%5BName%5D=Test
次のような場合、MVC は要求をシリアル化できないようです。personModel[Name] Test
カスタムバインダーを書かずにこれを解決する方法はありますか?