Способы получения данных контроллером. Стандартный привязчик DefaultModelBinder. Примеры.



Контроллеры часто нуждаются в доступе к данным из входящего запроса, таким как значения строки запроса, значения формы и параметры, извлеченные из URL системой маршрутизации.

Рассмотрим два способа доступа к таким данным:

1. извлечение данных из набора объектов контекста (1);

2. передача данных в качестве параметров методу действия(2).

(1) Набор свойств для доступа к информации, касающейся запроса:

§ Request,

§ Response,

§ RouteData,

§ HttpContext,

§ Server.

Каждое перечисленное свойство отвечает за конкретный аспект запроса и извлекает определенный тип данных из экземпляра ControllerContext для запроса.

Метод действия может использовать любой из этих объектов контекста для получения информации о запросе, как демонстрируется в примере

publicActionResultActionMethod()

   {

       // Получить доступ к разнообразным свойствам из объектов контекста

string userName = User.Identity.Name;

string serverName = Server.MachineName;

string clientIP = Request.UserHostAddress;

       DateTime dateStamp = HttpContext.Timestamp;

       // Извлечьотправленныеданныеиз Request.Form

string oldProductName = Request.Form["OldName"];

string newProductName = Request. Form ["NewName"];

// ...

returnView();

   }

(2)Методы действий могут принимать параметры. По сравнению с извлечением значений из объектов контекста это более аккуратный способ получения входных данных. Он упрощает восприятие кода методов действий.

Например, предположим, имеется следующий метод действия, использующий объекты контекста: Его можно переписать так, чтобы в нем применялись параметры: Инфраструктура MVC Framework предоставит значения для параметров метода действия, автоматически проверив объекты контекста и свойства, в том числе Request.QueryString, Request.Form и RouteData.Values. Имена параметров трактуются как нечувствительные к регистру символов, поэтому параметр метода действия по имени city может получить значение, например, из Request.Form["City"].

public ActionResult WeatherForecast()

{

string city = (string)RouteData.Values["city"];

DateTime forDate = DateTime.Parse(Request.Form["forDate"]);

// реализовать прогноз погоды

returnView();

}

// ...

public ActionResult WeatherForecast(string city, DateTime forDate)

{

// реализовать прогноз погоды

returnView();

}

// ...

Базовый класс Controller получает значения для параметров методов действий с использованием компонентов MVC Framework, называемых поставщиками значений и связывателями моделей. Поставщики значений представляют набор элементов данных, доступных контроллеру. Существуют встроенные поставщики значений, которые производят выборку элементов из Request.Form, Request.QueryString, Request.Files RouteData.Values. Эти значения затем передаются связывателям моделей, которые пытаются отобразить их на типы параметров, принимаемых методами действий. Стандартные связыватели моделей могут создавать и заполнять объекты любого типа .NET, включая коллекции и специальные типы, специфичные для проектов.

Привязчик DefaultModelBinder используется по умолчанию, если для данного типа не определен другой привязчик.

Чтобы получить значения для параметров, привязчик

1. просматривает следующие объекты строго по порядку:    

› Request.Form. В данном случае привязчик получает значения, отправленные с помощью форм

› RouteData.Values. Здесь получает значения с помощью маршрутов приложения

› Request.QueryString. В данном случае привязчик извлекает значения из строки запроса

› Request.Files. В данном случае используются загруженные на сервер файлы

2. Если в одном из этих объектов будет обнаружен соответствующий элемент, то на нем поиск прекращается, а параметру передается найденное значение.

3. Выполняется преобразование типов.

Поиск соответствия:например, привязчик ищет значения для параметров следующего действия:

public ActionResult Edit(int id) {

// ...}

Привязчик DefaultModelBinder просматривает в поиске значения для параметра id следующие пути:

›     Request.Form["id"]

›     RouteData.Values["id"]

›     Request.QueryString["id"]

›     Request.Files["id"]

Чтобы DefaultModelBinder мог связать значение с параметром, элемент данных запроса должен обязательно иметь то же имя, что и параметр. То есть в данном случае они оба должны иметь имя id.


Дата добавления: 2018-05-02; просмотров: 245; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!