La liaison de modèle fonctionne-t-elle également via une chaîne de requête?
Si j’ai une requête get comme:
GET /Country/CheckName?Country.Name=abc&Country.Id=0 HTTP/1.1
La méthode suivante dans CountryController aurait-elle son argument oCountry contenant les propriétés Id et Name avec les valeurs de la chaîne de requête?
public ViewResult CheckCountryName(Country oCountry) { //some code return View(oCountry); }
Pour une raison quelconque, j’obtiens l’ID en tant que 0 et le nom en tant que null dans l’object oCountry. Que manque-t-il ?
Oui, la liaison de modèle prend en charge la liaison à partir de la chaîne de requête. Cependant, les mêmes règles de liaison de modèle s’appliquent ici également: les noms de propriété / expressions doivent correspondre dans votre demande et dans votre modèle.
Ainsi, si vous avez une propriété Name
, vous devez disposer d’une clé Name
dans la chaîne de requête. Si vous écrivez Country.Name
le modèle de liaison commence par rechercher une propriété appelée Country
, puis une propriété Name
sur cet object country.
Donc, vous n’avez pas besoin du préfixe Country
pour vos noms de propriété, votre requête devrait donc ressembler à ceci:
/Country/CheckName?Name=abc&Id=1 HTTP/1.1
Ou, si vous ne pouvez pas modifier la demande, vous pouvez spécifier le préfixe de votre paramètre d’action avec l’ BindAtsortingbute
:
public ViewResult CheckCountryName([Bind(Prefix="Country")]Country oCountry) { //some code return View(oCountry); }