URIにネストされた配列を持つ複雑なオブジェクトを、GET 要求で MVC アクション メソッドに送信したいと考えています。
次のコードを検討してください。
public ActionResult AutoCompleteHandler([FromUri]PartsQuery partsQuery){ ... }
public class PartsQuery
{
public Part[] Parts {get; set; }
public string LastKey { get; set; }
public string Term { get; set; }
}
$.ajax({
url: "Controller/AutoCompleteHandler",
data: $.param({
Parts: [{ hasLabel: "label", hasType: "type", hasIndex : 1 }],
LastKey : "Last Key",
Term : "Term"
}),
dataType: "json",
success: function(jsonData) { ... }
});
これは問題なく動作し、 MVC Web Apiの既定のモデル バインダーを使用して正しくバインドします。
ただし、これを WebApi ではなくプレーンな MVC に切り替えると、デフォルトのモデル バインダーが機能しなくなり、ネストされた配列内のオブジェクトのプロパティをバインドできなくなります。
ウォッチリスト
partsQuery != null //Good
--LastKey == "Last Key" //Good
--Term == "Term" //Good
--Parts[] != null //Good
----hasLabel == null //Failed to bind
----hasType == null //Failed to bind
----hasIndex == 0 //Failed to bind
FromUriAttribute
これがプレーン MVC で失敗する理由と、プレーン MVC でこのオブジェクトを正しくバインドする方法を知りたい