ASP.
NET
MVC
Essentials
ASP.NET MVC
Telerik Software Academy
http://academy.telerik.com
Table of Contents
ASP.NET MVC Routing
Route constraints
Controllers and Actions
Action results and filters
Razor Views
Layout and sections
Helpers
Partial views
Areas
2
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.Ro
utes
Something similar to Apache
mod_rewrite
Greedy algorithm
the first match wins 4
Register routes
In Global.asax in the
Application_Start() there is
RouteConfig.RegisterRoutes(RouteTable.
Routes);
RoutesConfig class is located in
Routes to
/App_Start/ in internet applications
ignore
The [*] means
template by default allname
Route left
Route pattern
Default
parameters
5
Routing Examples
http://localhost/Products
/ById/3
Controller: Products
Action: ById
Id: 3
6
Routing Examples (2)
http://localhost/Products
/ById
Controller: Products
Action: ById
Id: 0 (optional parameter)
7
Routing Examples (3)
http://localhost/Products
Controller: Products
Action: Index
Id: 0 (optional parameter)
8
Routing Examples (4)
http://localhost/
Controller: Home
Action: Index
Id: 0 (optional parameter)
9
Custom Route
http://localhost/Users/Nik
olayIT
Controller: Users
Action: ByUsername
Username: ivaylo.kenov
10
Custom Route (2)
http://localhost/Users
Controller: Users
Action: ByUsername
Username: DefaultValue
11
Custom Route (3)
?
http://localhost/Users
Result: 404 Not Found
12
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
13
Custom Route
Constraint
public class LocalhostConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
return httpContext.Request.IsLocal;
}
}
routes.MapRoute("Admin",
"Admin/{action}",
new { controller="Admin" },
new {isLocal = new
LocalhostConstraint()}
);
14
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" />
15
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 18
Actions
Actions are the ultimate request
destination
Public controller methods
Non-static
No return value restrictions
Actions typically return an
ActionResult
19
ASP.NET MVC Request
20
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
FilePathResult file
FileStreamResult
21
Action Results (2)
Name Framework Producing
Behavior Method
HttpUnauthorizedRe Returns an HTTP 403
sult status
JavaScriptResult Returns a script to JavaScript
execute
JsonResult Returns data in JSON Json
format
RedirectResult Redirects the client to Redirect /
a new URL RedirectPermane
nt
RedirectToRouteRes Redirect to another RedirectToRoute /
ult action, or another RedirectToAction
controllers action
ViewResult Response is the View /
PartialViewResult responsibility of a view PartialView
engine
22
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 23
Action Selectors
ActionName(string name)
AcceptVerbs
HttpPost
HttpGet
HttpDelete
HttpOptions
NonAction
RequireHttps
ChildActionOnly Only for
Html.Action()
24
Action Filters
Apply pre- and post-processing
logic
Similar to HTTP Modules
Can be applied to actions and to
controllers
Global filters can be registered in
Name Description
GlobalFilters.
OutputCache Filters (or ofin
Cache the output a controller
/App_Start/FilterConfig.cs)
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 25
Custom Action Filter
Create C# class file in /Filters/
Inherit ActionFilterAttribute
We can override:
OnActionExecuting(ActionExecuting
Context)
OnActionExecuted(ActionExecutedC
ontext)
OnResultExecuting(ResultExecuting
Context)
OnResultExecuted(ResultExecutedC
ontext)
26
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 { // ... }
27
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) 29
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 30
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 =
Generate
Unit Testable d Output
Without requiring a controller or
web-server 31
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"] 32
How it works?
ByUsername.cs HTML
html Output
Template + Data
= Generated
Output
UsersControll
er.cs
UserModel
.cs
33
Razor Syntax
@ For values (HTML encoded)
<p>
Current time is: @DateTime.Now!!!
Not HTML encoded value: @Html.Raw(someVar)
</p>
@{ } For code blocks (keep the
view
@{
simple!)
var productName = "Energy drink";
if (Model != null)
{
productName = Model.ProductName;
}
else if (ViewBag.ProductName != null)
{
productName = ViewBag.ProductName;
}
}
<p>Product "@productName" has been added in your shopping
cart</p>
34
Razor Syntax (2)
If, else, for, foreach, etc. C#
statements
HTML markup lines can be included
at any part
<div class="products-list">
@: For plain text
@if (Model.Products.Count() == 0) line to be
rendered
{
<p>Sorry, no products found!</p>
}
else
{
@:List of the products found:
foreach(var product in Model.Products)
{
<b>@product.Name, </b>
}
}
</div>
35
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: [email protected]
</p>
36
Razor Syntax (4)
@() Explicit code expression
<p>
Current rating(0-10): @Model.Rating / 10.0 @* 6 / 10.0 *@
Current rating(0-1): @(Model.Rating / 10.0) @* 0.6 *@
[email protected] @*
[email protected] *@
spam_me@(Model.Rating) @* spam_me6 *@
</p>
@using for including namespace
into view
@model for defining the model
for the
@using view
MyFirstMvcApplication.Models;
@model UserModel
<p>@Model.Username</p>
37
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 38
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 = "~/Views/Shared/_UncommonLayout.cshtml";
}
layout pages
@{
Layout = null;
Views without layout:
}
39
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 40
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 41
HTML Helpers
Method Type Description
BeginForm, Form Returns an internal object that
BeginRouteForm represents an HTML form that the
system uses to render the <form>
tag
EndForm Form A void method, closes the pending
</form> tag
CheckBox, Input Returns the HTML string for a check
CheckBoxFor box input element
Hidden, HiddenFor Input Returns the HTML string for a hidden
input element
Password, Input Returns the HTML string for a
PasswordFor password input element
RadioButton, Input Returns the HTML string for a radio
RadioButtonFor button input element
TextBox, Input Returns the HTML string for a text
TextBoxFor input element
Label, LabelFor Label Returns the HTML string for an HTML
label element 42
HTML Helpers (2)
Method Type Description
ActionLink, Link Returns the HTML string for an
RouteLink HTML link
DropDownList, List Returns the HTML string for a
DropDownListFor drop-down list
ListBox, List Returns the HTML string for a
ListBoxFor list box
TextArea, TextArea Returns the HTML string for a
TextAreaFor 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
ValidationMessag Validation Returns the HTML string for a
e, validation message
ValidationMessag 43
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)
44
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 45
Partial Views
Partial views render portions of a
page Sub-
request
Reuse pieces of a view
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 46
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 48
Demo: Areas
ASP.NET MVC structures
(areas)
Summary
Routes maps URLs to controllers
and actions
Controllers are the brain of our
application
Actions are the ultimate request
destination
Razor is a powerful engine for
combining models and templates
into HTML code
Layout, sections, partials views and
helpers help us to divide our views 50
ASP.NET MVC Essentials
?
?
?
?
?
?
?
? ?
Questions?
?
?
?
?
?
?
? ?
?
?
, BG Coder - - online judge
,
http
ASP.NET - , , C#, .NET, ASP.NET
ASP.NET MVC HTML, SQL, C#, .NET, ASP.NET MVC
SEO - ,
, iPhone, Android, W P7, 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
53