Introduction to
ASP.NET MVC 4
Nikolay Kostov
Senior Software
Developer and Trainer
http://nikolay.it
Telerik Software Academy
Table of Contents
The MVC Pattern
ASP.NET MVC
Installation and Creating of ASP.NET MVC
Project
ASP.NET MVC Routing
Controllers and Actions
Razor Views
Areas
Kendo UI Widgets
2
The MVC Pattern
The MVC Pattern
Model–view–controller (MVC) is a software
architecture pattern
Originally
formulated in the late 1970s by
Trygve Reenskaug as part of the Smalltalk
Code reusability and separation of concerns
Originallydeveloped for
desktop, then adapted
for internet applications
4
Model
Set of classes
that describes the data we are
working with as well as the business
Rules
for how the data can be
changed and manipulated
May contain data validation rules
Often encapsulate data stored in a database as
well as code used to manipulate the data
Most likely a Data Access Layer of some kind
Apart from giving the data objects, it doesn't
have significance in the framework
5
View
Defines how the application’s user interface
(UI) will be displayed
May support master views (layouts) and sub-
views (partial views or controls)
Web: Template to dynamically generate HTML
6
Controller
The core MVC component
Process the requests with the help of views
and models
A set of classes that handles
Communication from the user
Overall application flow
Application-specific logic
Every controller has one or more "Actions"
7
MVC Steps
Incoming request routed to Controller
For web: HTTP request
Controller
processes request and creates
presentation Model
Controller also selects appropriate result (view)
Model is passed to View
View transformsModel into appropriate
output format (HTML)
Response is rendered (HTTP Response)
8
The MVC Pattern for Web
9
MVC Frameworks
CakePHP (PHP)
CodeIgniter (PHP)
Spring (Java)
Perl: Catalyst, Dancer
Python: Django, Flask, Grok
Ruby: Ruby on Rails, Camping, Nitro, Sinatra
JavaScript: AngularJS, JavaScriptMVC, Spine
ASP.NET MVC (.NET Framework)
10
ASP.NET MVC
ASP.NET Core
Presentation
ASP.NET
Caching .NET Globalization
Pages Controls Master Pages Runtime
Profile Roles Membership
Routes Handlers Etc...
12
ASP.NET Web Forms
Stable and mature, supported by heaps of
third party controls and tools
Event driven web development
Postbacks
Viewstate
Less control over the HTML
Hard to test
Rapid development
ASP.NET MVC
Runs on top of ASP.NET
Not a replacement for WebForms
Leverage the benefits of ASP.NET
Embrace the web
User/SEO friendly URLs, HTML 5, SPA
Adopt REST concepts
Uses MVC pattern
Conventions and Guidance
Separation of concerns
14
ASP.NET MVC (2)
Tight control over markup
Testable
Loosely coupled and extensible
Convention over configuration
Razor view engine
One of the greatest view engines
With intellisense, integrated in Visual Studio
Reuse of current skills (C#, LINQ, HTML, etc.)
Application-based (not scripts like PHP) 15
The ASP.NET MVC History
ASP.NET MVC 1.0
In February 2007, Scott Guthrie ("ScottGu") of
Microsoft sketched out the core of ASP.NET MVC
Released on 13 March 2009
ASP.NET MVC 2.0
Released just one year later, on 10 March 2010
ASP.NET MVC 3.0
Released on 13 January 2011
ASP.NET MVC 4.0
Released on 15 August 2012
16
Separation of Concerns
Each component has one responsibility
SRP – Single Responsibility Principle
DRY – Don’t Repeat Yourself
More easily testable
TDD – Test-driven development
Helps with concurrent development
Performing tasks concurrently
One developer works on views
Another works on controllers
17
Extensible
Replace any component of the system
Interface-based architecture
Almost anything can be replaced or extended
Model binders (request data to CLR objects)
Action/result filters (e.g. OnActionExecuting)
Custom action result types
View engine (Razor, WebForms, NHaml, Spark)
View helpers (HTML, AJAX, URL, etc.)
Custom data providers (ADO.NET), etc.
18
Clean URLs
REST-like
/products/update
/blog/posts/2013/01/28/mvc-is-cool
Friendlier to humans
/product.aspx?catId=123 or post.php?id=123
Becomes /products/chocolate/
Friendlier to web crawlers
Search engine optimization (SEO)
19
MVC Pattern in ASP.NET MVC
20
ASP.NET MVC Request
21
The Technologies
Technologies that ASP.NET MVC uses
C# (OOP, Unit Testing, async, etc.)
HTML(5) and CSS
JavaScript (jQuery, KendoUI, etc.)
AJAX, Single-page apps
Databases (MS SQL)
ORM (Entity Framework and LINQ)
Web and HTTP
22
Installation and Creating of
ASP.NET MVC Project
Demo Project
Forum system like http://stackoverflow.com
StackOverflow Forum Internet Application
Features:
User profiles
Forum features
Posting messages
Voting for posts
Administration
Other useful features (tags, search, comments)
24
The Tools
Tools that we need:
IDE: Visual Studio 2012 (Express for Web)
JustCode and Web Essentals
Framework: .NET Framework 4.5
Web server: IIS 8 (Express)
Data: Microsoft SQL Sever (Express or LocalDB)
Web PlatformInstaller 4.0 will install
everything we need for us
microsoft.com/web/downloads/platform.aspx
Install Visual Studio Express 2012 for Web
Web Platform Installer
26
tfs.visualstudio.com
Powered by Microsoft
Collaboration platform at the core of
application lifecycle management (ALM)
Source control system (TFS)
Free plan that includes:
Version control
Free builds
Up to 5 users
Unlimited number of projects
27
New ASP.NET MVC Project
28
Internet Application Project
29
Internet App Project Files
Static files (CSS, Images, etc.)
All controllers and actions
JavaScript files (jQuery, Modernizr, knockout, etc.)
View templates
_Layout.cshtml – master page (main template)
Application_Start() – The entry point of the application
Configuration file
30
Demo: Internet application
Making changes and debugging
NuGet package management
Free, open source package management
Makes it easy to install
and update open
source libraries and tools
Part of Visual Studio 2012
Configurable package sources
Simple as adding a reference
GUI-based package installer
Package manager console
32
Demo: NuGet
Install and update packages as easy
as adding a reference
ASP.NET MVC Routing
ASP.NET MVC Routing
Mapping between patterns and a combination
of controller + action + parameters
Routes are defined as a global list of routes
System.Web.Routing.RouteTable.Routes
Something similar to Apache mod_rewrite
Greedy algorithm
the first match wins
Register routes
In Global.asax in the Application_Start() there
is RouteConfig.RegisterRoutes(RouteTable.Routes);
RoutesConfig class is located in
/App_Start/ in
internet applications template by default
Routes to ignore
The [*] means all left
Route name
Route pattern
Default parameters
36
Routing Examples
http://localhost/Products/ById/3
Controller: Products
Action: ById
Id: 3
37
Routing Examples (2)
http://localhost/Products/ById
Controller: Products
Action: ById
Id: 0 (optional parameter)
38
Routing Examples (3)
http://localhost/Products
Controller: Products
Action: Index
Id: 0 (optional parameter)
39
Routing Examples (4)
http://localhost/
Controller: Home
Action: Index
Id: 0 (optional parameter)
40
Custom Route
http://localhost/Users/NikolayIT
Controller: Users
Action: ByUsername
Username: NikolayIT
41
Custom Route (2)
http://localhost/Users
Controller: Users
Action: ByUsername
Username: DefaultValue
42
Custom Route (3)
?
http://localhost/Users
Result: 404 Not Found
43
Route Constraints
Constraints are rules on the URL segments
All
the constraints are regular expression
compatible with class Regex
Defined as one of the routes.MapRoute(…)
parameters
44
Debugging Routes
In actions
we have access to a data structure
called RouteData
RouteData.Values["controller"]
RouteData.Values["action"]
RouteData.Values["id"]
We can use NuGet package RouteDebugger
Install-Package RouteDebugger
Web.config: <add key="RouteDebugger:Enabled"
value="true" />
Demo: Routes
ASP.NET MVC Routing
Controllers and Actions
The brain of the application
Controllers
The core component of the MVC pattern
All
the controllers should be available in a
folder by name Controllers
Controller
naming standard should be
"nameController" (convention)
Routers instantiate controllers in every request
All requests are mapped to a specific action
Every controller should inherit Controller class
Access to Request (context) and HttpContext
Actions
Actions are the ultimate request destination
Public controller methods
Non-static
No return value restrictions
Actions typically return an ActionResult
49
Action Results
Controller action response to a browser
request
Inherits from the base ActionResult class
Different results types:
Name Framework Behavior Producing Method
ContentResult Returns a string literal Content
EmptyResult No response
FileContentResult Return the contents of a file File
FilePathResult
FileStreamResult
50
Action Results (2)
Name Framework Behavior Producing Method
HttpUnauthorizedResult Returns an HTTP 403 status
JavaScriptResult Returns a script to execute JavaScript
JsonResult Returns data in JSON Json
format
RedirectResult Redirects the client to a Redirect /
new URL RedirectPermanent
RedirectToRouteResult Redirect to another action, RedirectToRoute /
or another controller’s RedirectToAction
action
ViewResult Response is the View / PartialView
PartialViewResult responsibility of a view
engine
51
Action Parameters
ASP.NET MVC maps the data from the HTTP
request to action parameters in few ways:
Routing engine can pass parameters to actions
http://localhost/Users/NikolayIT
Routing pattern: Users/{username}
URL query string can contains parameters
/Users/ByUsername?username=NikolayIT
HTTP post data can also contain parameters
52
Action Selectors
ActionName(string name)
AcceptVerbs
HttpPost
HttpGet
HttpDelete
HttpOptions
…
NonAction
RequireHttps
ChildActionOnly – Only for Html.Action()
53
Action Filters
Apply pre- and post-processing logic
Can be applied to actions and to controllers
Global filters can be registered in GlobalFilters.
Filters (or in /App_Start/FilterConfig.cs)
Name Description
OutputCache Cache the output of a controller
ValidateInput(false) Turn off request validation and allow
dangerous input (html tags)
Authorize Restrict an action to authorized users or roles
ValidateAntiForgeryToken Helps prevent cross site request forgeries
HandleError Can specify a view to render in the event of an
unhandled exception
54
Custom Action Filter
Create C# class file in /Filters/
Inherit ActionFilterAttribute
We can override:
OnActionExecuting(ActionExecutingContext)
OnActionExecuted(ActionExecutedContext)
OnResultExecuting(ResultExecutingContext)
OnResultExecuted(ResultExecutedContext)
We can applyour new attribute to a controller,
method or globally in GlobalFilters.Filters
55
Custom Action Filter (2)
public class LogAttribute : ActionFilterAttribute
{
public override void OnActionExecuting
(ActionExecutingContext filterContext) { /* */ }
public override void OnActionExecuted
(ActionExecutedContext filterContext) { /* */ }
public override void OnResultExecuting
(ResultExecutingContext filterContext) { /* */ }
public override void OnResultExecuted
(ResultExecutedContext filterContext) { /* */ }
}
[Log]
public class DepartmentController : Controller
{ // ... }
56
Razor Views
Views
HTML templates of the application
A lot of view engines available
View engines execute code and provide HTML
Provide a lot of helpers to easily generate HTML
The most popular is Razor and WebForms
We can pass
data to views through ViewBag,
ViewData and Model (strongly-typed views)
Views support master pages (layout views)
Other views can be rendered (partial views)
58
Razor
Template markup syntax
Simple-syntax view engine
Based on the C# programming language
Enables the programmer to use an HTML
construction workflow
Code-focused templating approach, with
minimal transition between HTML and code
Razor syntax starts code blocks with a @
character and does not require explicit closing
of the code-block 59
Design Goals
Compact, Expressive, and Fluid
Smart enough to differ HTML from code
Easy to Learn
Template
Is not a new language
Works with any Text Editor
Data
Has great Intellisense
Built in Visual Studio
Generated
Unit Testable Output
Without requiring a controller or web-server
60
Pass Data to a View
With ViewBag (dynamic type):
Action: ViewBag.Message = "Hello World!";
View: @ViewBag.Message
Strongly-typed views:
Action: return View(model);
View: @model ModelDataType;
With ViewData (dictionary)
ViewData["message"] = "Hello World!";
View: @ViewData["message"]
61
How it works?
ByUsername.cshtml HTML Output
Generated
Template Data
Output
UsersController.cs
UserModel.cs
62
Razor Syntax
@ – For values (HTML encoded)
<p>
Current time is: !!!
Not HTML encoded value:
</p>
@{ … } – For code blocks (keep the view simple!)
<p>Product " " has been added in your shopping cart</p>
63
Razor Syntax (2)
If, else, for, foreach, etc. C# statements
HTML markup lines can be included at any part
@: – For plain text line to be rendered
<div class="products-list">
<p>Sorry, no products found!</p>
@:List of the products found:
<b> , </b>
</div>
64
Razor Syntax (3)
Comments
@*
A Razor Comment
*@
//A C# comment
/* A Multi
line C# comment
*/
What about "@" and emails?
<p>
This is the sign that separates email names from domains: @@<br />
And this is how smart Razor is: spam_me@gmail.com
</p>
65
Razor Syntax (4)
@(…) – Explicit code expression
<p>
Current rating(0-10): / 10.0 @* 6 / 10.0 *@
Current rating(0-1): @* 0.6 *@
spam_me@Model.Rating @* spam_me@Model.Rating *@
spam_me @* spam_me6 *@
</p>
@using – for including namespace into view
@model – for defining the model for the view
<p> </p>
66
Layout
Define a common site template
Similar to ASP.NET master pages (but better!)
Razor view engine renders content inside-out
First view is redered, then layout
@RenderBody() –
indicate where we want
the views based on this
layout to “fill in” their
core content at that
location in the HTML
67
Views and Layouts
Views don't need to specify layout since their
default layout is set in their _ViewStart file:
~/Views/_ViewStart.cshtml (code for all views)
Each view can specify custom layout pages
Views without layout:
68
Sections
You can have one or more "sections" (optional)
They are defined in the views:
And may be rendered anywhere in the layout
page using the method RenderSection()
@RenderSection(string name, bool required)
If the section is required and not defined, an
exception will be thrown (IsSectionDefined())
69
View Helpers
Each view inherits WebViewPage
ViewPage has a property named Html
Html property has methods that return string
and can be used to generate HTML
Create inputs
Create links
Create forms
Other helper properties are also available
Ajax, Url, custom helpers
70
HTML Helpers
Method Type Description
BeginForm, Form Returns an internal object that represents an
BeginRouteForm HTML form that the system uses to render the
<form> tag
EndForm Form A void method, closes the pending </form> tag
CheckBox, CheckBoxFor Input Returns the HTML string for a check box input
element
Hidden, HiddenFor Input Returns the HTML string for a hidden input
element
Password, PasswordFor Input Returns the HTML string for a password input
element
RadioButton, Input Returns the HTML string for a radio button
RadioButtonFor input element
TextBox, TextBoxFor Input Returns the HTML string for a text input
element
Label, LabelFor Label Returns the HTML string for an HTML label
element
71
HTML Helpers (2)
Method Type Description
ActionLink, RouteLink Link Returns the HTML string for an HTML
link
DropDownList, List Returns the HTML string for a drop-
DropDownListFor down list
ListBox, ListBoxFor List Returns the HTML string for a list box
TextArea, TextAreaFor TextArea Returns the HTML string for a text area
Partial Partial Returns the HTML string incorporated
in the specified user control
RenderPartial Partial Writes the HTML string incorporated in
the specified user control to the
output stream
ValidationMessage, Validation Returns the HTML string for a validation
ValidationMessageFor message
ValidationSummary Validation Returns the HTML string for a validation
summary message
72
Custom Helpers
Write extension methods for the HtmlHelper
Return string or override ToString method
TagBuilder manages closing tags and attributes
Add namespace in web.config (if needed)
73
Custom Helpers (2)
Another way to write helpers:
Create folder /App_Code/
Create a view in it (for example Helpers.cshtml)
Write a helper in it using @helper
You can use the helper in any view
You have a lot of code in views? => write helpers
74
Partial Views
Partial views render portions of a page
Reuse pieces of a view Sub-request
Html helpers – Partial, RenderPartial and Action
Razor partial views are still .cshtml files
Located in the same folder as
other views or in Shared folder
75
Areas
Areas
Some applications can have a large number of
controllers
ASP.NET MVC lets us partition Web
applications into smaller units (areas)
An area is effectively an MVC structure inside
an application
Example: large e-commerce application
Main store, users
Blog, forum
Administration
77
Demo: Areas
ASP.NET MVC structures (areas)
Kendo UI Widgets
http://www.kendoui.com/
What is Kendo UI?
Framework for building modern interactive
web applications
Collection
of script files and resources (styles,
images, etc.)
Leverages
JavaScript
HTML5
CSS3
jQuery
80
What Does Kendo UI Provide?
Rich UI Widgets
HTML5 controls based on jQuery Core
3 categories of UI Widgets
Web
DataViz
Mobile
Client-side DataSource
Abstraction for working with all types of data
on the client side
81
What Does Kendo UI Provide(2)
MVVM Framework
Provides declarative binding and two-way data
synchronization in your web application
Animation and Drag & Drop
Templating
Validation Framework
Server wrappers
ASP.NET MVC
Java and PHP
82
Include Kendo UI in Project
Download it and unzip it (ask us for license)
Kendo UI Complete for ASP.NET MVC
Copy and reference Kendo.Mvc.dll
Located in: ...\wrappers\aspnetmvc\Binaries\Mvc3
Copy JavaScript files into ourProject\Scripts
js\kendo.all.min.js and js\kendo.aspnetmvc.min.js
Copy CSS files and images into our project
All from …\styles to ourProject\Styles\KendoUI
83
Include Kendo UI in Project (2)
Reference Kendo UI scripts and styles
In Views\Shared\_Layout.cshtml <head>
In Views\Shared\_Layout.cshtml before </body>
Add namespaces in ~/Views/Web.config
84
Using Kendo UI
Pure HTML and JavaScript
ASP.NET MVC wrappers
Kendo code MUST be after jQuery reference!
85
Demo: Kendo UI
http://demos.kendoui.com/web/overview/index.html
Summary
Model–view–controller (MVC) is a software
architecture pattern
ASP.NET MVC is a great platform for
developing internet applications
Routes maps URLs to controllers and actions
Razor views are powerful engine for combining
models and templates into HTML code
Our project can be divided into pieces (areas)
KendoUI is a powerful UI library with widgets
and can save us time writing them
87
Introduction to ASP.NET MVC 4
курсове и уроци по програмиране, уеб дизайн – безплатно BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране – Телерик академия форум програмиране, форум уеб дизайн
уроци по програмиране и уеб дизайн за ученици ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET
http://schoolacademy.telerik.com
програмиране за деца – безплатни курсове и уроци ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен SEO курс - оптимизация за търсачки алго академия – състезателно програмиране, състезания
курсове и уроци по програмиране, книги – безплатно от Наков курс мобилни приложения с iPhone, Android, WP7, PhoneGap
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop Дончо Минков - сайт за програмиране
free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране
безплатен курс "Качествен програмен код"
безплатен курс "Разработка на софтуер в cloud среда" C# курс, програмиране, безплатно
Free Trainings @ Telerik Academy
“C# Programming @ Telerik Academy
csharpfundamentals.telerik.com
Telerik Software Academy
academy.telerik.com
Telerik Academy @ Facebook
facebook.com/TelerikAcademy
Telerik Software Academy Forums
forums.academy.telerik.com