Направо към съдържанието

ASP.NET MVC

от Уикипедия, свободната енциклопедия

ASP.NET MVC е платформа, създадена от Microsoft, която служи за изработване на уеб приложения, използвайки модела Model-View-Controller ( MVC ). Платформата използва C#, HTML, CSS, JavaScript и бази данни. ASP.NET MVC е съвременно средство за изграждане на уеб приложения, което обаче не замества изцяло уеб формите. Платформата включва изцяло нови тенденции в разработката на уеб приложения, притежава много добър контрол върху HTML и дава възможност за създаване както на малки, така и на големи приложения. ASP.NET MVC може да бъде много лесно тествана и допълвана, защото е изградена от отделни модули, които са изцяло независими едни от други. Платформата е базираха върху приложения, а не върху скриптове ( като PHP например). [1]

Основни концепции

MVC (Model-View-Controller) е шаблон за дизайн, който решава някои основни проблеми като : разделяне на отговорностите в уеб приложенията и преизползване на кода. MVC шаблонът е разработен през 70-те години на 20-ти век от Trygve Reenskaug (скандинавец). Първоначално MVC e бил част от Smalltalk (език за програмиране на десктоп приложения). След това е адаптиран за интернет приложения.

Модел

Моделът представлява множество от класове, които моделират данните, с които работим. Тази концепция е известна още като бизнес логика. В модела може да има и правила, които валидират данните. Той изпълнява ролята на Data Access Layer (слой за достъп до информацията). Достъпът до данните, с които работим, от базата данни се нарича енкапсулиране. Моделът не зависи от конкретното приложение.

Изглед

Изгледът представлява шаблон, по който се генерира потребителския интерфейс. По – конкретно в десктоп приложенията изгледът е множество от контроли (таблици, падащи менюта), които изграждат видимата част за потребителите. В интернет приложенията изгледът работи с определени данни, слага ги в шаблон на HTML, данните се обработват, генерира се готов HTML, който се връща обратно на потребителя.

Контролери

Контролерите са най-важната концепция от MVC. Te са ядрото на всеки Model-View-Controller продукт и определят логиката, по която приложението работи. Контролерите представляват множество от класове, които приемат заявки от потребителя, обработват данните от заявките и връщат краен резултат. Всеки контролер има едно или повече действия.


MVC шаблонът създава приложения, в които различните аспекти (входна логика, бизнес логика и интерфейс логика) са разделени, като същевременно осигурява свободно взаимодействие между различните елементи. Шаблонът определя къде да бъде съхранена всеки вид логика в приложението. Интерфейс логиката принадлежи на изгледа. Входната логика принадлежи на контролите, докато бизнез логиката принадлежи на модела. Това разделение помага в случай на по-сложно приложение, защото позволява на програмиста да се фокусира само върху един аспект от имплементацията. Например, може да се фокусираме върху изгледа, без да се интересуваме от бизнес логиката. Свободното взаимодействие между тези три компоненти в MVC приложенията дават възможност за паралелно изграждане. Например, трима различни програмисти могат да работят върху трите компоненти по едно и също време.[2]

Рутиране

Какво е рутиране

Рутирането е метод за валидация и обработка на заявката от потребителя. След като рутирането получи заявката, то проверява дали тази заявка отговаря на рутиращите шаблони и ако бъдат намерени съответствия, първият физически поставен в кода шаблон, отговарящ на дадената заявка, изпълнява функции за подаване на данните от заявката към съответните контролери, действия и параметри.

Как се регистрира и дефинира рутирането

При стартиране на ASP.NET MVC приложението първият файл, който се стартира, се нарича "Global.asax" и съответно в него първият метод, който се извиква, е с име "Application_start()".Във този метод има фунции за регистрация на Area, WebApi, Filters, Routing и Bundle. Именно тук се регистрира и нашето рутиране (Routing) чрез извикване на класа RoutingConfig, през метода RegisterRoutes и през него се регистрира рутирането в глобалната таблица RouteTable.

Съдържание на Global-Asax файла
Съдържание на Global-Asax файла
Конфиг файловете в папка Апп Старт

За да дефинирате рутиранете е нужно да конфигурирате файла RouteConfig.cs, който се намира в папката App_Start заедно с останалите Config файлове. Тук вече се конфигурира метода RegisterRoutes, който се извиква от "Global.asax" файла. Този метод използва глобална таблица, която може да бъде извикана отвсякъде в нашето приложение и в нея има методи IgnoreRoute и MapRoute. IgnoreRoute методът се използва за да се пренебрегнат заявки, които не желаем да обработим. Чрез метода MapRoute ние регистрираме нашето рутиране като то си има име, url-шаблон и стойности по подразбиране.

Регистриране на рутиране
Регистриране на рутиране

Шаблоните в рутирането са case-insensitive, което означава, че шаблонът ще разпознае данните без значение дали са с малки или главни букви. Ако при заявката никой от шаблоните не бъде обхванат, то тогава сървърът връща error-404.

Дебъгване на рутирането

ASP.NET MVC ни предоставя готов дебъгер който може да свалим през NuGet packege и в него потърсите RouteDebugger.

Инсталация на дебъгера за рутиране
Инсталация на дебъгера за рутиране

Дебъгерът се появява отдолу на страницата след нейното стартиране.

Изображение на дебъгера
Изображение на дебъгера

Ако желаете той да бъде спрян, е нужно да отворите Web.Config файла на вашето приложение и във него да промените този ред "<add key="RouteDebugger:Enabled" value="true" />", като смените стойността value да е равна на false (<add key="RouteDebugger:Enabled" value="false" />).

Спиране на дебъгераValue=False
Спиране на дебъгераValue=False

[3]

Контролери и действия

Какво са контролери

Контролерите са класове, които се създават в MVC приложинието. Намират се в папка Controllers. Всеки един клас ,който е от този тип, трябва да има име завършващо с наставка "Controller". Контролерите обработват постъпващите заявки, въведени от потребителя и изпълняват подходящата логика за изпълнение на приложението. Класът контролер е отговорен за следните етапи на обработка:

* Намиране и извикване на най-подходящия метод за действие (action method) и валидиране, че може да бъде извикан.
* Взимането на стойности, които да се използват като аргументи в метода за действие.
* Отстраняване на всички грешки, които могат да възникнат по време на изпълнението метода за действие.
* Осигуряване на клас WebFormViewEngine по подразбиране за отваряне на страници с изглет от тип ASP.NET.

За да създадем контролер натискаме дясното копче на мишката върху папката "controllers" в прозореца "solution explorer" на Visual Studio, избираме "add" и след това "controller".

Пример за създаване на контролер
Пример за създаване на контролер

След появяването на прозореца "Add controller" трябва да се въведе име на контролера. То трябва да завършва с наставката "controller".

AddController прозорец
AddController прозорец

Контролера е клас който се наследява от базовия клас System.Web.Mvc.Controller. Всеки публичен метод в контролера е показан като "controller action". Ако искаме даден метод да не бъде извикан ,трябва да сложим "NonAction" атрибут върху неговото име.По подразбиране "Index()" действието е извикано за контролера , когато друго такова не е изрично упоменато.

Примерен код
Примерен код
NoAction атрибут
NoAction атрибут

[4]

Методи за действие

В ASP.NET приложения, които не ползват MVC Framework, взаимодействията с потребителя са организирани и контролирани чрез страници . За разлика от това в приложения с MVC framework взаимодействията с потребителя са организирани чрез контролери и методи за действие. Контролерът определя метода за действие и може да включва толкова методи за действие,колкото са необходими.

Методи за действие обикновено имат функции ,които са пряко свързани с взаимодействието с потребителя. Примери за взаимодействие с потребителите са въвеждане на URL адрес в браузъра, кликване върху линк, и подаването на формуляр. Всяко едно от тези потребителски взаимодействия изпраща заявка към сървъра. Във всеки един от тези случаи, URL адреса от заявката съдържа информация, която MVC Framework използва за да включи метод за действие.[5]

Примерен код
Примерен код

В посочения горе пример имаме три действия (Index,Testing1,Testing2),които са дефинирани в контролер клас "TestingController". За да извикаме различни действия , трябва да напишем следното в полето за адреси:

Начин на изписване: /{controller}/{action}/{id}
  • /TestingController/Index :- Извиква Index() действие.
  • /TestingController/Testing1 :- Извиква Testing1() действие.
  • /TestingController/Testing2/pijush :- Извиква Testing2() действие с "pijush" за Id параметър.
  • /TestingController :- Извиква Index() действие.


Списък резултати от дейстия.

Action Results

  • View():- Представлява ASP.NET MVC изглед т.е., когато вашия браузър връща HTML. Това е най-рапространения "ActionResult" ,който може да върне един контролер.
  • PartialView():- Извиква част от ASP.NET MVC изгледа.
  • RedirectToAction():- Пренасочва от едно контролер действие в друго. Параметри с които може да се изполва това действие са:
-actionName: Името на действието.
-controllerName: Името на контролера.
-routeValues: Стойностите които са предадени на действието.

Метода RedirectToAction() връща "302 found HTTP" статус код на браузъра ,за да може да направи пренасочването към новото действие. Едно от предимствата на това действие е ,че когато се прави пренасочване в браузъра - полето за адреси се обновява с новия URL линк. Недостатък е ,че трябва да се направи повторна заявка от браузъра към сървъра.

  • Redirect():- Пренасочва към друг контролер или URL линк.
  • Content():- Данни които постъпват към браузъра. Параметрите ,които могат да се използват като аргументи, са:
-string: Изобразява string на браузъра.
-contentype: Типът MIME на данните (по подразбиране за text/html).
-contentEncoding: Текстовото кодиране на данните (например:-Unicode или ASCII)
  • Json():- JavaScript object Notation (JSON) e изобретен от Douglas Crockford като по-лека алтернатива на XML за пращане на данни по интернет в Ajax приложения. Метода Json() използва клас в .NET framework наречен JavaScriptSerializer за да преобразува обект в JSON репрезентация.[6]
  • File():- Връщане на фаил от действие. Този метод приема следните параметри:
-filename, contentType, fileDownloadName, fileContents, fileStream.
  • JavaScript():- Представлява JavaScript фаил.
  • HandleUnknownAction():- Този метод се извиква автоматично когато контролера не може да намери ресурс. По подразбиране метода изкарва грешка "404 resource Not Found". Съобщението за грашка може да бъде сменено с друго ,това обаче изисква да се пренапише контролер класа.

Валидация

Какво е валидиране

Валидирането на входните данни, въведени от потребителя (user input), позволява да се уверим, че те съответстват на модела на данните в ASP.NET MVC. По този начин се защитава приложението от потребителски грешки или злонамерени потребители. Има много начини да се включи валидиране в едно MVC приложение. Например, може да бъде използвана публично достъпна библиотека за валидиране, като Microsoft Enterprise Library Validation Block.

Как работи валидирането

Когато потребителят потвърди (submit) формуляр(form), данните от формуляра се предават на метод за действие (action method) с помощта на ViewDataDictionary колекция. ViewDataDictionary има ModelState свойство(property), което съдържа колекция от ModelState обекти. За всеки модел, който е дефиниран в MVC приложението, се създава съответния ModelState обект и добавя в колекцията. Действието, което получава данните от формуляра определя правилата за проверка, прилагани към формуляра с данни. Ако правилото е нарушено, действието използва ModelState свойство за да предаде информация за грешка обратно към изгледа. [7]

Изгледи

Какво е изглед

Изгледите са тези, които определят как ще бъде визуализиран потребителският интерфейс (UI) на приложението. В ASP.NET MVC се поддържат средства (engines) за генериране на изгледи.

Начин на работа на изгледите

Когато потребителт взаимодейства с изглед, данните се рутират от изгледа до метод за действие, който от своя страна може да създаде друг изглед. Едно MVC приложение може да има няколко контролери, всеки от които може да съдържа множество методи за действие, а всяко действие може да създаде различен изглед. Изгледите са организирани в папки, като името им се определя от това на свързания контролер (например изгледите от HomeController са в папката \Views\Home).

Добавяне на изглед на MVC приложение в Visual Studio

      1.В Solution Explorer,  щракнете с десния бутон на мишката върху папката, 
      която носи името на нужния ви контролер. Например ако контролерът е с име
      HomeController, щракнете с десния бутон върху папката Home.
      2.Натиснете Add,  след което View. Отваря се диалогов прозорец.
      3.Попълнете име, вид изглед и т.н, в зависимост от това какъв изглед искате
      да създадете.
      4.Натиснете Add

[8]

История

Първа поява

За пръв път ASP.NET MVC е била представена през октомври 2007г от Скот Гътри на първата ALT.NET конференция в Остин, Тексас. Въпреки че Гътри заявява в своя блог[9], че ASP.NET MVC ще бъде пусната в употреба като напълно поддържана функция на ASP.NET през първата половина на 2008 , първата официална версия на продукта се появява на 13 март 2009г.

Апаче лиценз 2.0

През март 2012г. Скот Гътри съобщава в блогa[10] си, че Microsoft са пуснали версия на техния уеб пакет включващ ASP.NET MVC, Web API и ASP.NET Web Pages (още наричан Razor) под лиценза на Apache 2.0.

История на версиите

История на версиите
Дата Версия
13 Март 2009 ASP.NET MVC 1.0[11]
16 Декември 2009 ASP.NET MVC 2 RC[12]
4 Февруари 2010 ASP.NET MVC 2 RC 2[13]
10 Март 2010 ASP.NET MVC 2[14]
6 Октомври 2010 ASP.NET MVC 3 Beta[15]
9 Ноември 2010 ASP.NET MVC 3 RC[16]
10 Декември 2010 ASP.NET MVC 3 RC 2[17]
13 Януари 2011 ASP.NET MVC 3[18]
13 Септември 2011 ASP.NET MVC 4 Developer Preview[19]
14 Февруари 2012 ASP.NET MVC 4 Beta[20]
31 Май 2012 ASP.NET MVC 4 RC[21]
15 Август 2012 ASP.NET MVC 4[22]
26 Юни 2013 ASP.NET MVC 5 Preview [23]

Източници

  1. http://academy.telerik.com/school-academy/2012-2013/programming-with-asp-net-mvc
  2. http://www.asp.net/mvc/tutorials/older-versions/overview/asp-net-mvc-overview
  3. http://academy.telerik.com/school-academy/2012-2013/programming-with-asp-net-mvc
  4. http://www.codeproject.com/Articles/595024/Controllers-and-Actions-in-ASP-NET-MVC
  5. http://msdn.microsoft.com/en-us/library/dd410269(v=vs.98).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
  6. https://en.wikipedia.org/wiki/Douglas_Crockford
  7. http://msdn.microsoft.com/en-us/library/dd410404(v=vs.90).aspx
  8. http://msdn.microsoft.com/en-us/library/dd410403(v=vs.90).aspx
  9. http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx
  10. http://weblogs.asp.net/scottgu/archive/2012/03/27/asp-net-mvc-web-api-razor-and-open-source.aspx
  11. http://go.microsoft.com/fwlink/?LinkId=144444
  12. http://haacked.com/archive/2009/12/16/aspnetmvc-2-rc.aspx
  13. http://haacked.com/archive/2010/02/04/aspnetmvc2-rc2.aspx
  14. http://weblogs.asp.net/scottgu/archive/2010/03/11/asp-net-mvc-2-released.aspx
  15. http://www.asp.net/whitepapers/mvc3-release-notes
  16. http://www.asp.net/whitepapers/mvc3-release-notes
  17. http://www.asp.net/whitepapers/mvc3-release-notes
  18. http://www.asp.net/whitepapers/mvc3-release-notes
  19. http://haacked.com/archive/2011/09/13/asp-net-mvc-4-developer-preview-released.aspx
  20. http://www.microsoft.com/en-us/download/details.aspx?id=28942
  21. http://blogs.msdn.com/b/webdev/archive/2012/05/31/new-features-for-web-development-in-visual-studio-2012-rc.aspx
  22. http://blogs.msdn.com/b/webdev/archive/2012/08/15/visual-studio-2012-rtw.aspx
  23. http://www.asp.net/mvc/tutorials/mvc-5/introduction/getting-started