web-dev-qa-db-ja.com

モデルバインディングは、asp.netmvcのクエリ文字列を介して機能しますか

モデルのバインドはクエリ文字列でも機能しますか?

次のようなgetリクエストがある場合:

GET /Country/CheckName?Country.Name=abc&Country.Id=0 HTTP/1.1

CountryControllerの次のメソッドには、クエリ文字列の値を持つIdプロパティとNameプロパティを含むoCountry引数がありますか?

public ViewResult CheckCountryName(Country oCountry)
{
     //some code
     return View(oCountry);
}

何らかの理由で、oCountryオブジェクトでIdを0、Nameをnullにしています。何が欠けている ?

17
Brij

はい、モデルバインディングはクエリ文字列からのバインディングをサポートしています。ただし、ここでも同じモデルバインディングルールが適用されます。プロパティ名/式は、リクエストとモデルで一致する必要があります。

したがって、Nameプロパティがある場合は、クエリ文字列にNameキーが必要です。あなたが書くならCountry.Nameモデルバインディングは、最初にCountryというプロパティを探し、次にその国のオブジェクトでNameプロパティを探します。

したがって、プロパティ名にCountryプレフィックスは必要ないため、リクエストは次のようになります。

/Country/CheckName?Name=abc&Id=1 HTTP/1.1

または、リクエストを変更できない場合は、アクションパラメータのプレフィックスをBindAttributeで指定できます。

public ViewResult CheckCountryName([Bind(Prefix="Country")]Country oCountry)
{
     //some code
     return View(oCountry);
}
24
nemesv