Работает ли привязка модели через строку запроса в asp.net mvc

Работает ли привязка модели по строке запроса?

Если у меня есть запрос на получение, например:

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

Будет ли следующий метод в CountryController иметь свой аргумент oCountry, содержащий свойства Id и Name со значениями из строки запроса?

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

По какой-то причине я получаю Id как 0 и Name как null в объекте oCountry. Что не хватает?

Ответы

Ответ 1

Да, привязка модели поддерживает привязку к строке запроса. Однако здесь применяются те же правила привязки модели: имена или выражения свойств должны совпадать в вашем запросе и в вашей модели.

Итак, если у вас есть свойство 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);
}