Предыдущий ролик Следующий ролик  

Видео урок: Using models in actions and views

Основы ASP.NET MVC 5

Продолжая наш проект с того места, на котором мы остановились в конце предыдущей главы, займемся теперь внедрением модели в наше приложение и узнаем, как можно подготовить экземляр этой модели с помощью контроллера, а затем передать его в представление. Посмотрим, что входит в папку Models на этом этапе. Итак, у нас есть модели AccountViewModel и IdentityModel. Эти модели мы обсудим в последующих видео, а сейчас создадим совершенно новый класс модели. Нажмем правой кнопкой мыши на папке Models, выберем пункт Добавить -> Создать элемент (Add -> New item) или же нажмем клавишу Ctrl+Shift+A, что даст нам тот же результат.

В разделе Visual C# -> Код выберем вариант "Класс" и назовем этот класс CheckingAccount. Сейчас наш класс довольно прост. С помощью фрагментов кода я добавлю в этот класс несколько открытых свойств. Итак, нажимаем правую кнопку мыши, выбираем пункт Вставить фрагмент -> Visual C#, а затем находим в появившемся списке "prop". Более быстрый способ получения такой строки - ввести слово "prop" и дважды нажать клавишу Tab. Итак, в качестве первичного ключа будет выступать свойство Id типа int, затем идет свойство AccountNumber типа String. Для номера счета используется строковый тип, поскольку в нем могут присутствовать лидирующие нули, являющиеся значимыми. После этого добавим свойства FirstName, LastName и Balance, который имеет тип decimal.

Далее добавим контроллер, который можно использовать для работы с моделью CheckingAccount и передачи ее в представление. Нажмем правой кнопкой мыши на папке Controllers и выберем пункт Добавить -> Контроллер. Если в вашем приложении есть некая база данных, то некоторые из этих шаблонов контроллеров действительно дадут вам определенное преимущество, например, шаблон "MVC-контроллер с действиями чтения и записи и представлениями, использующий Entity Framework". Но сейчас мы выберем тот, который автоматически создаст несколько заглушек: "MVC-контроллер с пустыми действиями чтения и записи". Назовем этот контроллер CheckingAccountController.

Действие Details будет возвращать представление с именем Details и отображать информацию о текущем счете пользователя. Сейчас мы собираемся создать просто временный, размещенный в памяти счет, поэтому удалим параметр Id. Если нажать правой кнопкой мыши на действии и выбрать пункт "Добавить представление", то можно добавить соответствующее представление с именем Details. Если в качестве шаблона указать Details, то впоследствии в качестве класса модели можно выбрать CheckingAccount. Таким образом, некоторая часть логики отображения настраивается автоматически.

Поле "Класс контекста данных" оставим незаполненным до тех пор, пока не настроим базу данных. Нам не нужно частичное представление и не нужно никаких библиотек скриптов, поскольку мы будем только отображать данные и не будем выполнять никаких интерактивных действий. Оставим отметку в поле "Использовать макет страницы", но путь задавать не будем, так как он определен в файле _ViewStart. Если в этом поле снять отметку, то в самом представлении свойство layout примет значение "null", и мы потеряем наш макет. Итак, посмотрим, что же происходит внутри этого представления. В самом верху находится очень важный элемент - директива model.

Она указывает на то, что данное представление будет работать с моделью типа CheckingAccount. И если в коде Razor мы встретим слово "Model", начинающееся с заглавной буквы M, то будем знать, что это ссылка на модель CheckingAccount, которая была передана в это представление. Здесь вы можете увидеть еще больше вспомогательных методов HTML, в этот раз строго типизированных: мы передаем лямбда-выражение, чтобы выделить конкретное свойство этой модели. Метод DisplayNameFor возвращает HTML, содержащий имя свойства, а метод DisplayFor - HTML, содержащий значение свойства.

Таким образом, предполагается, что в данное представление будет передан экземпляр CheckingAccount, но мы пока ничего для этого не сделали. Давайте вернемся к нашему контроллеру и добавим с этой целью небольшой фрагмент кода в соответствующее действие. Опять же, поскольку у нас пока не настроена база данных, просто создадим размещенный в памяти тестовый счет. Всплывающая панель помогает подобрать необходимое пространство имен. Для CheckingAccount мы не создавали конструктор, но можем просто задать начальные значения следующим образом. Номер счета с несколькими лидирующими нулями, имя - Майкл, фамилия - Салливан и баланс в 500 долларов.

Все, что нам нужно сделать, - передать это как параметр в метод View. Последнее, что нужно сделать, - обновить ссылку для кнопки "Запрос баланса" таким образом, чтобы она демонстрировала страницу с подробной информацией о счете. Я уже сделал это. Поскольку с этим тегом ссылки уже много чего происходило и внутри него есть некий HTML, я не стал конвертировать его в вызов метода HTML.Action, как это делал раньше. Я просто заменил значение href на результат вспомогательного метода URL под названием Url.Action.

Принцип его действия аналогичный. Он может принимать в качестве параметра действие и имя контроллера, но возвращает не полный элемент ссылки, а лишь URL. Давайте перекомпилируем и запустим приложение по клавише Ctrl+F5. Теперь можно проверить баланс хотя бы с помощью этих тестовых данных. В следующем видео мы узнаем, как изменить отображаемые названия, поскольку мы не хотим, чтобы они точно совпадали с именами свойств. Мы также узнаем, как с помощью формы создать модель и выполнить ее валидацию.