モデルのバインドはクエリ文字列でも機能しますか?
次のような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にしています。何が欠けている ?
はい、モデルバインディングはクエリ文字列からのバインディングをサポートしています。ただし、ここでも同じモデルバインディングルールが適用されます。プロパティ名/式は、リクエストとモデルで一致する必要があります。
したがって、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);
}