私のコントローラでは、以下のようにCustomer viewmodelクラスを定義しました。要求がPOSTによって発行され、GETによって発行された場合に解決されない場合、MVCモデルバインディングが複雑なオブジェクトを正しく解決するのはなぜですか?
二つの性質のFirstName、LastNameのと3番目のプロパティの受注がWICHあり、注文のコレクションです
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int OrderId { get; set; }
public string OrderBy { get; set; }
}
public class TestController : Controller
{
public ActionResult TestCustomer1(Customer customer)
{
return Json(customer);
}
}
クライアントボタンをクリックして起動したときに、私はAJAX呼び出しによって、コントローラにデータを送信OnCustomerClick()
function OnCustomerClick() {
var complexObject = {
FirstName: 'Saroj',
LastName: 'K',
Orders: [{ OrderId: 1, OrderBy: 'Saroj' }, { OrderId: 2, OrderBy: 'Kumar' }]
};
var obj = { customer: complexObject };
var data2send = obj;
$.ajax({
type: "POST",
url: 'TestCustomer1',
data: data2send,
success: function (arg) { //call successfull
},
error: function (xhr) {
//error occurred
}
});
};
タイプで上記のようにアクションが呼び出されたときのポイントです。POSTコントローラのCustomerパラメータが要求されました。代わりに私がアクション:タイプ:GETパラメータオブジェクトは、プロパティをnullに設定してインスタンス化されます。
シリアライズされたオブジェクトを表す文字列は、2つのケースで全く同じです。最初のケースのaction:bodyリクエスト、2番目のケースのurlパラメータに文字列が渡される方法を変更するだけです。 POSTリクエストで
リクエストボディ 顧客%の5BFirstName%5D = Saroj &顧客%の5BLastName%5D = K &顧客%の5BOrders%の5Dの%5B0%5D%5BOrderId%5D = 1 &顧客%の5BOrders%の5D%以下5B0%5D%5BOrderBy%5D = Saroj &顧客%の5BOrders%の5Dの%5B1%5D GETにおける%5BOrderId%5D = 2 &顧客%5BOrdersの%の5Dの%5B1%5D%5BOrderBy%5D =クマール
クエリ文字列要求 /TestCustomer1?customer%5B FirstName%5D = Saroj &カスタマー%5BLastName%5D = K &お客様%5B発注者%5D%5B0%5D%5B注文ID5D = 1 &顧客%5B注文%5D%5B0%5D%5B注文%5D = Saroj &顧客%5B注文%5D%5B1%5D%5B注文番号%5D = 2 &カスタマー%5B発注者%5D%5B1%5D%5BOrderBy%5D = Kumar
誰にでも私がこの2つのケースでモデルバインディングの動作が変わる理由を教えてもらえますか?
、それは 'のvar complexObject = {FirstNameとする必要があります。 OrderId:1、Orders [0] .OrderBy: 'Saroj'、Orders [1] .OrderId:2、Orders [1] .OrderBy: 'Kumar'} ' –