Как быстро стартовать в asp net mvc?
Посоветуйте материалы для быстрого старта с сим фреймворком.
Владею С#, MS/my SQL, немного знаю html, css, английский.
- Вопрос задан более трёх лет назад
- 20003 просмотра
Комментировать
Решения вопроса 5
Создайте сайт из книги ASP.NET MVC 4/5 Адама Фримана — бесплатно естьтут. Потом на основе этого придумайте свой сайт или усовершенствуйте сайт из примера.
Так же есть краткие и хорошие уроки для новичков от chernikov’a на Хабре.
И больше писать и пробовать решать задачи, придумайте проект или возьмите реальный, и попробуйте реализовать.
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
В дополнение к вышесказанному могу добавить следующие источники: онлайн-книги Изучаем ASP.NET MVC 4 и Руководство по ASP.NET MVC 5
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Пройдите официальные туториалы на сайте asp.net/mvc
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Николай Турнавиотов @foxmuldercp
Системный администратор, программист, фотограф
Если нет знаний в шарпе вообще, как у меня год назад — возьмите Троелсена, почитайте.
Шилдта можно.
Потом мануалы на оф сайте mvc.
ну я сейчас изучаю Фреймворк написанием своего варианта домашней веб бухгалтерии, заодно и html, css. jquery, twitter bootstrap
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Гайдар Магдануров asp.net mvc погуглите
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- IT-образование
Как смотреть популярные видео-объяснения по CS новичку с нехваткой теории?
- 1 подписчик
- 19 часов назад
- 114 просмотров
ASP.NET MVC Урок 1. Начало
Цель урока: Изучить Global.asax и поведение запуска веб-приложения, обработки веб-запроса. Изучение Nuget и Подключение протоколирования.
Начало
Создадим приложение ASP.NET MVC 4 Web Application «Lesson1» (рис 1.):
Не будем запускать приложение, а сразу установим (если до этого не сделали) NuGet расширение:
NuGet Package Manager – это расширение для Visual Studio, которое позволяет добавлять в существующие проекты модули, которые значительно упрощают работу. При создании «Basic» asp.net mvc4 приложения в само приложение было добавлено изначально много модулей. Их список мы можем найти, кликнув в Manage NuGet Packages… в контекстном меню проекта:
О них по порядку:
- Entity Framework – обеспечивает работу с БД
- jQuery (+ jQuery UI, jQuery Validation) – популярный javascript framework (о нем еще пойдет речь позже).
- Json.NET – классы для работы с json-форматом данных.
- knockoutjs – javascript библиотека для работы с Model View ViewModel архитектурой. (http://knockoutjs.com/)
- Microsoft.Net Framework 4 Http Client Libraries – программный интерфейс для работы с HttpContext-ом.
- Microsoft ASP.NET MVC 4 – собственно, классы паттерна проектирования MVC (то, что есть предметом изучения)
- Microsoft ASP.NET Razor 2 – view-движок. Есть еще ASPX и Spark – мы о них также будем говорить позже
- Microsoft ASP.NET Universal Providers Core Libraries (Microsoft ASP.NET Universal Providers for LocalDB) – предоставляет инструменты для поддержки всех SQL Server 2005 (и более поздних) и для SQL Azure.
- Microsoft ASP.NET Web API (Microsoft ASP.NET Web API Client Libraries, Microsoft ASP.NET Web API Core Libraries, Microsoft ASP.NET Web API Web Host) – для создания REST приложений, работа с XML, JSON и так далее
- Microsoft ASP.NET Web Optimization Framework – оптимизирует передачу данных, например, минимизирует js-код
- Microsoft ASP.NET WebPages 2 – набор классов для работы во View
- Microsoft jQuery Unobtrusive Ajax (Microsoft jQuery Unobtrusive Validation) – jQuery библиотека для поддержки ajax/валидации
- Microsoft.Web.Infrastructure – позволяет динамически регистрировать HTTP-модули во время выполнения
- Modernizr – js-библиотека, которая позволяет использовать html5 и css3 в старых браузерах
- WebGrease – позволяет минифицировать html, css, js.
Для метода (действия) Index добавим View и выберем ~Views/Shared/_Layout.cshtml в качестве layout (типа master page):
Собственно, можем запускать.
Всё что мы увидим – это:
Почему контроллер надо было назвать именно Home и как это работает, мы будем изучать более подробно в следующих уроках.
Global.asax
А сейчас обратим внимание на файл Global.asax:
public class MvcApplication : System.Web.HttpApplication < protected void Application_Start() < AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); >>
Класс MvcApplication наследует HttpApplication и содержит инструкции для инициализации приложения. Есть еще несколько событий, на которые можно добавить код. Рассмотрим их:
- public void Init() – приложение инициализируется или при первом вызове. Оно вызывается для всех экземпляров объекта HttpApplication.
- public void Dispose() – вызывается непосредственно перед уничтожением объекта HttpApplication. Это идеальное место для очистки ранее используемых ресурсов.
- Application_Error – наступает, когда необработанное исключение случается в приложении.
- Application_Start – наступает, когда первый экземпляр HttpApplication создается. Это позволяет создавать объекты доступные для всех экземпляров класса HttpApplication.
- Application_End – наступает, когда все созданные ранее экземпляры класса HttpApplication уничтожены. Это событие наступает только однажды в течение всего времени жизни приложения.
- Application_BeginRequest – наступает, когда приложение получает запрос. Первый раз это событие наступает для запроса страницы, когда пользователь вводит URL.
- Application_EndRequest – Последнее событие, которое наступает для запроса к приложению.
- Application_PreRequestHandlerExecute – наступает прежде, чем ASP.NET запустит обработчик страницы или веб-службу.
- Application_PostRequestHandlerExecute – наступает, когда ASP.NET заканчивает обработку.
- Applcation_PreSendRequestHeaders – наступает перед тем, как ASP.NET посылает клиенту (браузеру) HTTP заголовки.
- Application_PreSendContent – наступает перед тем, как ASP.NET посылает клиенту (браузеру) HTTP содержимое.
- Application_AcquireRequestState – наступает, когда ASP.NET получает текущее состояние (состояние сессии), связанное с текущим запросом.
- Application_ReleaseRequestState – наступает, когда ASP.NET завершает исполнение всех событий. В результате все модули сохраняют свои текущие состояния.
- Application_ResolveRequestCache – наступает, когда ASP.NET выполняет запрос авторизации. Это позволяет модулям кеширования обработать запрос и обслужить из кэша, минуя обработчик выполнения.
- Application_UpdateRequestCache – наступает, когда ASP.NET завершает выполнение обработчика, чтобы модули кеширования могли сохранить результат для использования в последующих ответах.
- Application_AuthenticateRequest – наступает, когда модуль идентификации устанавливает личность текущего пользователя как действительную. В текущий момент, учетные данные пользователя уже проверены.
- Application_AuthorizeRequest – наступает, когда модуль авторизации подтверждает, что пользователь может иметь доступ к ресурсам.
- Session_Start – наступает, когда новый пользователь заходит на сайт.
- Session_End – наступает, когда истекает время сессии пользователя, или он покидает сайт.
Package Manager Console
В NuGet есть консоль для выполнения команд по установке\удалению\поиску модулей, и других вещей, типа скаффолдинга.
Для вывода всех установленных модулей пишем:
Get-Package
Для получения всех доступных к установке модулей:
Get-Package –ListAvailable
Для получения всех доступных модулей с названием NLog
Get-Package -ListAvailable -Filter NLog
Get-Package -ListAvailable | where (это дольше)
Для установки модуля NLog необходимо вначале выбрать проект (если их в солюшене больше одного) и ввести команду:
Install-Package NLog
Файлы копируются в проект, добавляются ссылки на сборки и web.config может быть обновлен.
Для удаления из проекта модуля необходимо, чтобы он не был связан с другими модулями. Удаляем так:
Uninstall-Package NLog
NLog
После установки пользуемся документацией на NLog (https://github.com/nlog/nlog/wiki/Tutorial) и добавляем в Web.config:
Мы ее потом исправим. Добавим в код (Global.asax.cs):
public class MvcApplication : NinjectHttpApplication < private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
protected void Application_Start() < logger.Info("Application Start"); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); >public void Init() < logger.Info("Application Init"); >public void Dispose() < logger.Info("Application Dispose"); >protected void Application_Error() < logger.Info("Application Error"); >protected void Application_End()
Запустим и завершим приложение (Stop). Откроем файл C://file.txt. Мы увидим, какие события происходили.
2012-09-18 19:18:11.5668|INFO|Lesson1.MvcApplication|Application Start 2012-09-18 19:18:13.7319|INFO|Lesson1.MvcApplication|Application Init 2012-09-18 19:18:14.2709|INFO|Lesson1.MvcApplication|Application Init 2012-09-18 19:18:14.2769|INFO|Lesson1.MvcApplication|Application BeginRequest 2012-09-18 19:18:14.3579|INFO|Lesson1.MvcApplication|Application AuthenticateRequest 2012-09-18 19:18:14.3579|INFO|Lesson1.MvcApplication|Application AuthorizeRequest 2012-09-18 19:18:14.3579|INFO|Lesson1.MvcApplication|Application ResolveRequestCache 2012-09-18 19:18:14.3989|INFO|Lesson1.MvcApplication|Session Start 2012-09-18 19:18:14.3989|INFO|Lesson1.MvcApplication|Application AcquireRequestState 2012-09-18 19:18:14.3989|INFO|Lesson1.MvcApplication|Application PreRequestHandlerExecute 2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application PreRequestHandlerExecute 2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application ReleaseRequestState 2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application UpdateRequestCache 2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application EndRequest 2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application PreSendRequestHeaders 2012-09-18 19:18:35.6061|INFO|Lesson1.MvcApplication|Session End 2012-09-18 19:18:38.0833|INFO|Lesson1.MvcApplication|Application Dispose 2012-09-18 19:18:38.0833|INFO|Lesson1.MvcApplication|Application End 2012-09-18 19:18:39.1383|INFO|Lesson1.MvcApplication|Application Dispose
- Area (области),
- Filter (фильтры),
- Bundle (комплекты),
- Route (маршруты).
WebActivator
WebActivator – это модуль, который позволяет запустить код до самого первого старта App_Start. Это может быть необходимо для того, чтобы, к примеру, создать тестовую БД перед запуском.
Установим:
Install-Package WebActivatorEx
Добавим класс в App_Start папку:
[assembly: WebActivator.PreApplicationStartMethod(typeof(PreStartApp), "Start")] namespace Lesson1.App_Start < public static class PreStartApp < private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); /// /// Метод запускается один раз перед стартом приложения /// public static void Start() < logger.Info("Application PreStart"); >> >
В файле логов увидим, что строка Application PreStart исполняется раньше Application Start:
2012-09-19 10:29:01.3950|INFO|Lesson1.App_Start.PreStartApp|Application PreStart 2012-09-19 10:29:01.6290|INFO|Lesson1.MvcApplication|Application Start
Создадим четыре файла отдельно для trace (трассировки), debug (отладки), info (информации), error (ошибки). Определим место записи: /Contents/logs/[текущая дата] Перепишем конфигурацию:
/Content/logs/$" /> /trace.txt" /> /debug.txt" /> /info.txt" /> /errors.txt" />
Log2Console
Для NLog есть еще классная программа Log2Console, которая позволяет получать логи прямо в окне программы.
Запускаем программу и настраиваем приемщик:
В Web.config пишем:
Обращаю внимание, что писать надо address=”tcp4://…”, а не address=”tcp://…”
Простейший багтрекер на ASP .NET MVC
Технология ASP .NET уже давно перестала быть неповоротливым монстром и уделом унылых корпоративных приложений. Заряженная MVC фреймворком, платформа ASP .NET превращается в грозное оружие, нацеленное на хайлоад и действительно большие проекты.
Что мне понравилось в ASP .NET MVC
Моя основная работа никогда не была напрямую связана с web-разработкой. Все проекты создавались в свободное время и на технологиях, которые были мне симпатичны. Изначально мой выбор (как и у многих) пал в сторону PHP. Я долго на нем писал код, постоянно закрывая глаза на его странности и проблемы. Мне нравились многие PHP-фреймворки (Kohana, CodeIgniter, FuelPHP и т.д.) и с удовольствием применял их в своих проектах. Однако, несмотря на плюсы и многообразие готовых каркасов мне всегда хотелось переметнуться в другой лагерь и посмотреть, как происходит процесс разработки аналогичных вещей там. Сначала я присматривался к популярному Ruby с его рельсами, но потом все же решил остановиться на .NET. Перечислять плюсы данной платформы можно долго, но наиболее значимыми для меня все же стали:
Если код пахнет откровенной тухлятиной, то компилятор обязательно сообщит об этом и разработчик сможет предпринять необходимые действия. Разрабатывая приложение под ASP .NET я попадаю в ту же самую среду, где в моем распоряжении предсказуемый и строго типизированный язык (C#) с подушкой безопасности в лице компилятора.
Model View Controller
На страницах нашего журнала я уже несколько раз рассматривал Архитектурный паттерн MVC (модель, представление, контроллер). В одном из номеров я даже приводил пример разработки простейшего MVC фреймворка на PHP. Паттерн MVC условно делит архитектуру приложения на три компонента:
Главная цель MVC – обеспечить разделение ответственности между основными компонентами приложения. Контроллер ничего не должен знать о нюансах формирования верстки или хранению данных в БД, а выполнять лишь роль проводника. Пользователь попросил, а контроль нашел правильный путь, не задумываясь о том, что там может произойти.
Багтрекер
Типичный пример при знакомстве с подобными фреймворками – создание еще одного движка для блога. Я сначала хотел пойти тем же путем, но в итоге решил придумать более полезное приложение. Так родилась идея проверить фреймворка на создании проекта «Багтрекер». Такие приложения наиболее востребованы в компаниях, где более-менее налажен процесс разработки и совсем скоро ты убедишься, что сотворить нечто подобное на ASP .NET MVC пуще простого.
Теперь давай определимся с функционалом будущего проекта. Будущий багтрекер должен:
С первыми двумя пунктами все ясно – немного кода на C# и все готово, но как быть с интерфейсом? Мы воспользуемся фреймворком TwitterBootstrap, который позволит нам состряпать симпатичный интерфейс для приложения за несколько минут. Я не стану приводить портянку из пары десятков килобайт HTML кода, а просто дам ссылку на готовую заготовку http://goo.gl/Xvhsmh. Качай и повторяй действия вместе со мной.
Делаем проект
У меня нет профессиональной версии студии, поэтому я воспользовался экспресс версией редакции «Для web». Запускай студию и создавай новый проект «Веб-приложение ASP .NET 4». С гордым названием BugTrackerForX.
В окне мастера создания нового проекта тебе будет предложено выбрать шаблон для приложения. Шаблоны позволяют сразу же снабдить будущее творение определенным функционалом. Например, выбрав шаблон «Интернет-приложение», ты получишь заготовку с готовой регистрационной формой и механизмом аутентификации.
Для своего проекта мы выберем вариант «Простой». Такой прожект не будет включать в себя ничего лишнего и это будет в самый раз для первого знакомства с миром ASP .NET MVC. В окне выбора шаблона для приложения также обрати внимание на пункт «View Engine». Здесь выбирается шаблонизатор для представлений. Тебе доступно два варианта: Razor и ASPX.
Во второй версии фреймворка MVC в качестве шаблонизатора использовался ASPX, пришедший из классического ASP .NET. После PHP’ного многообразия движков для рендеринга представлений начинаешь испытывать приступы тошноты от его неуклюжести. Лучше сразу выбирать Razor, максимально приближенный к аналогичным PHP-решениям (Smarty, Twig и т.д.).
Больше никаких галок ставить не нужно, жми «OK» и студия сгенерирует болванку приложения.
Структура MVC приложения
Открой окно «Solution Explorer» по шире и мотай теорию на ус.
Выжигаем модели
Начинать разработку приложения будем с проектирования моделей. Для создания баг трекера нам потребуются описать несколько моделей:
Каждая модель в ASP .NET MVC фреймворке описывается в виде отдельного класса в папке Model (можно в любом месте). Добавление новые моделей выполняется в контекстном меню с помощью пункта «Add» -> «Class». Создай все выше озвученные модели (см. соответствующие листинги) и возвращайся к тексту статьи.
Листинг 1. Описание модели Category
public class Category < Public int CategoryId < get; set; >public string Title < get; set; >>
Листинг 2. Описание модели Status
public class StatusModel < public int StatusId < get; set; >public string Title < get; set; >>
Листинг 3. Описание модели Ticket
public class Ticket < public int TicketId < get; set; >public string Title < get; set; >public string Description < get; set; >public DateTime Date < get; set; >public int? CategoryId < get; set; >public virtual Category Category < get; set; >public int? StatusId < get; set; >public virtual Status Status < get; set; >public int? UserId < get; set; >public virtual User User
Листинг 4. Описание модели User
public class User < public int UserId < get; set; >public string FirstName < get; set; >public string LastName < get; set; >public string Email < get; set; >>
Подключаем Entity Framework
Платформа .NET предоставляет нам несколько способов доступа к данным. Мы воспользуемся наиболее актуальным из них – Entity Framework. Помимо типичных задач, возлагающих на ORM (Object relation mapping) фреймворк, в EF реализована поддержка методики CodeFirst, позволяющая девелоперу на этапе разработки не задумываться о дизайне схемы БД. Достаточно лишь описать модели, а вопросы создания базы и таблиц на себя возьмет сам фреймворк. Нельзя сказать, что такая схема будет готова к использованию в продакшене, однако, при разработке приложения с нуля такой подход позволит существенно сэкономить время.
Чтобы воспользоваться плюсами этого фреймворка, нам необходимо подключить его к своему проекту. Проще всего это сделать при помощи консоли управления пакетами NuGet. Сразу после инсталяции Visual Studio for Web расширение Nuget Package Manager недоступно. Его требуется установить самостоятельно, воспользовавшись пунктом «Extensions and Update» в меню «Service». После установки запускай «Nuget Package Manager Console» и вводи в ней команду для установки Entity Framework: «Install-Package EntityFramework».
Установив Entity Framework, мы можем создать контекст данных для наших моделей и начать производить первые манипуляции с добавленными в БД записями. Под страшным словом «контекст» подразумевается создание класса наследника от DbContext (System.Data.Entity), который свяжет модели с таблицами базы данных. Создавай новый класс для контекста данных в директории «Models» и переписывай в него код листинга 5.
Листинг 5. Реализация класса контекста
public class BugTrackerContext : DbContext < public DbSetCategories < get; set; >public DbSet Statuses < get; set; >public DbSet Tickets < get; set; >public DbSet Users < get; set; >>
После создания контекста мы можем воспользоваться технологией CodeFirst, т.е. доверить EntityFramework создание таблиц и полей. В своем примере я воспользуюсь именно этим способом, т.к. статья не резиновая и тратить время на описание процесса создания схемы БД нет смысла. К тому же ничего не мешает тебе самостоятельно создать БД (ради эксперимента) и познакомиться с подходом DatabaseFirst (сначала база, потом код).
В принципе, уже на данном этапе мы можем создать контроллер с представлениями, и EF любезно сгенерирует базу данных. Однако, мы лучше сразу внесем небольшой твик в конфигурационный файл (Web.config), тем самым принудительно зададим имя базы. Найди в этом файле описание секции «ConnectionStrings» и удали из нее (если есть) все разделы. После добавь одну строку:
В этой строке я определил, что фреймворк должен использовать BugTrackerContext для связи с БД, а саму базу будет хранить в файле ourBase.mdf, расположенный в директории данных (App_Data) проекта.
CRUD приложение в пару кликов
Фактически наше приложение научилось работать с базой данных, но в реале мы этого еще не увидели т.к. ни разу не запускали наш баг трекер. Надо срочно исправлять положение дел, но у нас еще нет ни одного контроллера и представлений. Следовательно, запустив проект сейчас, хорошего мы ничего не увидим. Я предлагаю пока не заморачиваться на верстке представления с подготовленным нами красивым интерфейсом. Лучше быстренько протестируем то, что есть.
Создадим для этого простейший CRUD (Create read update delete) функционал без единой строчки кода. Переходи в «Solution Explorer» и добавь в папку «Controllers» новый контроллер с именем «CrudController». В окне создания нового контроллера не торопись кликать на пимпу с кнопкой «OK». В выпадающем поле «Template» выбери «MVC controller with read/write actions and views, using Entity Framework». После этого станут доступны поля для выбора классов, описывающих модель и контекст данных. Выбирай Ticket (в качестве модели) и BugTrackerContext (в качестве контекста). Остальные поля можешь оставить со значениями по умолчанию.
Нажимай на пимпу «Ok» и восхищайся, как студия создала за нас код действий с необходимыми представлениями. Нам остается только запустить приложение и проверить результат его выполнения. Сразу предупреждаю, после запуска ты увидишь не результат работы CRUD, а ошибку «Ресурс не найден». Мы не прописали маршрут по умолчанию, поэтому чтобы добраться до сгенерированного контроллера тебе потребуется вбить в адресной строке полный путь к нему: http://localhost:53532/crud. Альтернативным решением будет внесение изменений в конфигурацию маршрута (файл RouteConfig.cs):
defaults: new
В этой строке я устанавливаю, что контроллером по умолчанию является crud (а не Home, как было изначально). Внеся изменения в маршрут – перезапусти приложение, и ты сразу попадешь в сгенерированный CRUD интерфейс.
Во время создания тикета ты увидишь, что фреймворк сгенерировал нам выпадающие списки для полей «Category», «Status» и «User», но в этих списках нет ни одного элемента для выбора. Чтобы в них что-то появилось нам нужно добавить данные в соответствующие таблицы. Прерви выполнение аппликации и через окно «DatabaseExplorer» открой соответствующие таблицы для внесения данных. Я создал пару статусов в таблице «Statuses» и парочку разделов в «Categories», после этого выпадающие поля в представлении заполнились добавленными данными.
CRUD-приложение получилось вполне рабочим, но для постоянного использования оно не годится. Уж больно смотрится «топорно» и не функционально. У нас уже есть забутстрапенная заготовка верстки, и теперь остается ее натянуть на существующее приложение, а заодно познакомиться с самостоятельным созданием контроллеров и представлений.
Добавляй новый пустой контроллер к своему проекту и назови его «HomeController». Visual Studio сгенерирует каркас будущего контроллера и создаст действие «Index». Это действие будет выполняться во время обращение к имени контроллера. Например, чтобы обратится к нашему контроллеру «Home», нам требуется перейти по адресу: http://localhost/home.
Пока ты переписываешь код контроллера, я расскажу тебе о реализации контроллеров в ASP .NET MVC. Как ты уже понял из листинга, контроллер – это не что иное, как обычный класс, унаследованный от System.Web.Mvc.Controller. При создании нового контроллера ты должен следовать некоторым соглашениям. Главным, из которых будет обязательное наличие постфикса «Controller». Например, если ты хочешь создать контроллер «Adminka», то в этом случае полное имя должно быть «AdminkaController».
Чтобы обратится к созданному контроллеру (из браузера) необходимо написать в адресной строке полное имя контроллера и через слэш имя действия. Если требуется передать в контроллер какие-нибудь дополнительные параметры (например, методом Get), то их также следует указывать через слеш. Такой подход справедлив для маршрута, определенного по умолчанию. Например, для передачи параметра «1» контроллеру «adminka» следует пройти по пути: «http://localhost/adminka/1». Обрати внимание, что в браузере указать постфикс «Controller» не требуется.
Листинг 6. Код контроллера
private BugTrackerContext db = new BugTrackerContext(); public ActionResult Index() < var tickets = db.Tickets.Include(p =>p.Category).Include(p => p.Status).Include(p => p.User); return View(tickets.ToList()); >
У тебя может возникнуть резонный вопрос: «Возможно ли, как-то повлиять на установленные правила роутинга?». Шаблон маршрута определен в классе RouteConfig и ты волен им рулить как хочешь. Например: " ru// " заставит добавлять к имени контроллера префикс «ru».
Хочется еще рассказать про маршруты, но, увы, объем статьи ограничен. Пора переходить к расмсотрению небольшого примера кода, демонстрирующего обработку внешних параметров в контроллере. Думаю, комментарии излишни:
int myParam1 = Int32.Parse(Request.Params["myParam"]);
Дизайним представление
Контроллер успешно принимает пользовательские запросы, и теперь пора сотворить для него представление. Добавить для контроллера новое представление. Проще всего это сделать посредством пункта «Add View» контекстного меню, вызываемого при правом клике по имени действия контроллера.
В ASP .NET MVC принято выделять несколько типов представлений:
Ok, теперь попробуем создать наше первое представление. Поскольку в нашем приложении будет несколько повторяющихся элементов (например, общая разметка, сайдбар и т.д.). Мы можем пихать этот код в каждую вьюшку, но выгодней создать одну мастер страницу, которая впоследствии будет использоваться при формировании других представлений.
Мастер страницы принято помещать в директорию «Shared». Для своего примера я определил одно представление и назвал его _bugTrackerMasterPage.cshtml (содержит основную часть верстки). Приводить код вьюшки я не буду причине ее объема, а лучше сразу рассмотрю используемые управляющие конструкции:
Разобравшись с используемыми управляющими конструкциями, становится ясно, что весь код представлений, созданный на основе мастер-страницы будет включен на место вызова RenderBody().
Чтобы остальные представления знали на основе какой мастер-страницы им рендерится мы должны указать на нее ссылку:
Во время разбора кода мастер-страницы ты наверняка обратил внимание на символ «собачка», расположенный возле каждой управляющей конструкции. Все что идет после этого символа воспринимается как код на языке C#. Если требуется выполнить несколько строк управляемого кода, то для этого надо воспользоваться открывающими и закрывающими скобками.
Теперь посмотрим на код представления Index. В вьюшке формируется список имеющихся в базе тикетов. Выборка самих данных происходит в контроллере и список с ними передается в представление:
BugTrackerContext db = new BugTrackerContext(); var tickets = db.Tickets.Include(p => p.Category).Include(p => p.Status).Include(p => p.User); return View(tickets.ToList());
Запрос к таблицам БД выполняется не напрямую, а через Entity Framework. Поскольку модель «Ticket» содержит ссылки на другие модели, то мы должны включить их в запрос (метод Include()). Сформированная выборка передается в качестве параметра соответствующему представлению.
Вывод данных из модели в самом представлении осуществляется в стандартном цикле:
@foreach (var c in Model)
Здесь я перебираю записи из Model, которую предварительно объявили в самом начале файла представления:
@model IEnumerable.
На этом код первого index() можно считать разобранным, самое время осуществить тестовый запуск проекта и посмотреть результат. Полный список тикетов выводится и теперь остается лишь добавить код добавления новых записей, ну это будет твоим домашним заданием.
Dispose
Разрабатывать WEB-приложения под платформу ASP.NET благодаря фреймворку ASP .NET стало значительно проще. Рассмотренный в статье пример лишнее тому подтверждение. Я не хочу сказать, что ASP .NET – это золотой костыль или серебряная пуля web-строителя. Это очередная технология, которую нужно уметь применять и получать выгоду. Мир на PHP, пусть даже с его многообразием самых разных фреймворков однозначно не заканчивается. Не стесняйся пробовать альтернативные технологии, не засиживайся в одной, пусть даже самой комфортной среде. Сравнивай технологии и выбирай из них наиболее оптимальную для конкретной задачи. На этом у меня все.
Стоит ли изучать классический ASP .NET?
Простота MVC фреймворка для ASP .NET может запросто создать ошибочное мнение. Мол, на фиг этот «неповоротливый» ASP .NET с его «странной» разметкой, мне хватит и ASP .NET MVC. Не стоит забывать, что MVC это всего лишь архитектурный паттерн и его можно реализовать самостоятельно на любом языке. Тут ситуация аналогична миру PHP. С момента появления mvc-фреймворков язык получил второе дыхание и сумел привлечь новых поклонников. Почему? Порог вхождения и в без того простой язык программирования снизился. Многие вещи стали доступны из коробки.
В мире ASP .NET произошла аналогичная ситуация. MVC фреймворк от Microsoft существенно понизил барьер вхождения в технологию ASP .NET,. Правда это не говорит, что без фреймворка платформа никуда не годится. Просто запомни, что фреймворк это лишь очередной слой, скрывающий от твоего взора ряд нюансов классического ASP .NET. Имея достаточный уровень подготовки, ты без проблем можешь сделать свою реализацию MVC фреймворк под платформу ASP .NET. Он тоже сможет в три пятнадцать делать красивые урлы и осуществлять контроль на генерируемой разметкой. К чему это я все говорю? А к тому, что технология ASP .NET намного шире, чем просто ASP .NET MVC. Ее глубокому изучения однозначно стоит уделить время и только тогда ты сможешь по-настоящему прочувствовать всю платформы от Microsoft, которая так полюбилась в корпоративном сегменте.
Топ 5 мифов об ASP .NET/ASP .NET MVC
- «А под unix-like это не заведется!». Еще как заведется. Достаточно немного почитать о проекте Mono (http://goo.gl/dS3v), а потом статью «Установка ASP .NET на Linux (nginx+mono+xsp) с Хабра (http://goo.gl/rPJbX) и миф сразу развеется в дымке;
- «Это же жутко дорого, надо много $$$». Опять неправда. Можно воспользоваться Express версии Visual Studio for Web (именно ее я использовал при написании статьи) или какой-нибудь альтернативной средой (все верно, здесь сплошная демократия). Остальные компоненты (например, SQL Server) также доступны в бесплатных вариантах. Кроме того, Microsoft регулярно проводит всяческие акции/скидки, позволяющие получить полноценный версии продуктов либо совсем бесплатно, либо с существенной скидкой.
- «Microsoft делает дырявый софт». Ну да, и это не мешает им богатеть и завоевывать новые рынки. Если серьезно, продукты Microsoft в большинстве случаев намного безопасней, чем OpenSource альтернативы. Проверить это не трудно. Заходим на баг трекер и смотрим количество ошибок под IIS (как пример) и под Apache. Результаты приятно удивят.
- «PHP приложения работают быстрей». Точно, работают. Не забывай, что код под ASP .NET будет сначала компилироваться, а только потом исполнятся. Причем именно выполнятся, а не стремиться умереть как аналогичный на PHP. Поэтому PHP если немного и побеждает, то только на фальш старте. Производительность ASP .NET хорошо показывает себя на больших проектах.
- «На PHP программировать проще». Порог вхождения действительно ниже, но не настолько как об этом твердят на каждом шагу. Время, вложенное в изучение полностью объектно-ориентированный C# окупиться на первом же более сложном проекте.
В AdvantShop стартовал практический курс «Базовый MVC ASP.NET/C#»
20 апреля в AdvantShop стартовал курс «Базовый MVC ASP.NET/C#». Он нацелен на программистов, back-end разработчиков и студентов старших курсов.
На вводном занятии ребятам презентовали программу курса. Рассказали о технологиях ASP.NET, принципах MVC и работе с базами данных.
Вы научитесь:
24 апреля
27 апреля
4 мая
11 мая
15 мая
18 мая
22 мая
Пройдя курс, вы получите сертификат, который дополнит ваше портфолио, прокачаете себя, научитесь создавать крутые проекты на ASP.NET., а по успешным итогам курса - возможность получить работу в известной IT-компании.
Слышал о HTML-CSS? Нравится программировать? Хочешь научиться новому? Тогда этот курс именно для тебя!
Успей записаться прямо сейчас: Практический курс course-programming.ru/
Создать аккаунт на AdvantShop
На платформе вы сможете быстро создать интернет-магазин, лендинг или автоворонку.
Воспользоваться консультацией специалиста
Ответим на любые ваши вопросы и поможем выйти на маркетплейсы.