asp .net mvc
DESCRIPTION
asp.netTRANSCRIPT
-
ASP .NET MVC 5
Nemanja Kojic, MScEE
1
-
What is MVC?
Model-View-Controller (MVC)
Standard Architectural Pattern
Separation of concerns:model, view, controller
2 of 114
-
ASP .NET MVC Framework
An alternative to ASP .NET Web Forms
Presentation framework Lightweight
Highly testable
Integrated with the existing ASP .NET features: Master pages
Membership-Based Authentication
...
3 of 114
-
ASP .NET MVC Framework Components
Models Business/domain logic Model objects, retrieve and store model state in a
persistent storage (database).
Views Display applications UI UI created from the model data
Controllers Handle user input and interaction Work with model Select a view for rendering UI
4 of 114
-
When to use MVC approach?
Advantages:
Easier to manage complexity (divide and conquer)
It does not use server forms and view state
Front Controller pattern (rich routing)
Better support for test-driven development
Ideal for distributed and large teams
High degree of control over the application behavior
5 of 114
-
ASP .NET MVC Features
Separation of application tasks
Input logic, business logic, UI logic
Support for test-driven development
Unit testing
No need to start app server
Extensible and pluggable framework
Components easily replaceable or customized(view engine, URL routing, data serialization,)
6 of 114
-
ASP .NET MVC Features (cont.)
Support for Dependency Injection (DI)
Injecting objects into a class
Class doesnt need to create objects itself
Support for Inversion of Control (IOC)
If an object requires another object, the first should get the second from an outside source (configuration file)
7 of 114
-
ASP .NET MVC Features (cont.)
Extensive support for ASP .NET routing
Building apps with comprehensible and searchable URLs
Customizable URLs Adapted to work well with search engines
Adapted to REST addressing
Decoupled from resource files
Use of existing ASP .NET features (backward compatibility)
8 of 114
-
ASP .NET MVC App Structure
URLs mapped to controller classes
Controller handles requests,
executes appropriate logic and
calls a View to generate HTML response
URL routing ASP .NET routing engine (flexible mapping)
Support for defining customized routing rules
Automatic passing/parsing of parameters
9 of 114
-
ASP .NET App Structure
No Postbackinteraction!
All user interactions routed to a controller
No view state and page lifecycle events
10 of 114
-
MVC App Execution
Entry points to MVC:
UrlRoutingModule and MvcRouteHandler
Request handling:
Select appropriate controller
Obtain a specific controller instance
Call the controllers Execute method
11 of 114
-
MVC App Execution - stages
Receive first request for the application Populating RouteTable
Perform routing Create MVC Request handler Create controller Execute controller Invoke action Execute result
ViewResult, RedirectToRouteResult, ContentResult, FileResult, JsonResult, RedirectResult
12 of 114
-
MVC App Execution
13 of 114
-
RAZOR ENGINEBUILDING VIEW PAGES USING RAZOR LANGUAGE
14 of 114
-
Razor Engine
A new view-engine
Optimized around HTML generation
Code-focused templating approach
15 of 114
-
Razor Engine Design goals
Compact, Expressive and Fluid
Easy to learn
It is not a new language
Works with any text editor
Great Intellisense
Unit-testable
Testing views without server, controllers
16 of 114
-
Razor HelloWorld
Uses @ for Razor blocks
.aspx file
razor file
17 of 114
-
Loops and Nested HTML
.aspx syntaxRazor syntax
18 of 114
-
If Blocks and Multi-line Statements
Multi-Token statement
IF statement
Multi-line statement Variables
Variables can span multiple server
code blocks!
19 of 114
-
Integrating Content and Code
Parser examines right-hand side of @ character.
Identifying nested content with HTML
block tag
20 of 114
-
Layout/Master page
SiteLayout.cshtml
@RenderBody()Including specific body content.
21 of 114
-
Content page
Explicitly setting LayoutPage property.
Complete HTML page.
22 of 114
-
Master page section overrides
This section is optional.
This section is optional.
23 of 114
-
Master page section overrides
Named section.
Named section.
24 of 114
-
Master page result html
25 of 114
-
Re-usable HTML Helpers
Methods that can be invoked within code-blocks
Encapsulate generating HTML
Implemented using pure code
Work with Razor engine
Built-in HTML helper
26 of 114
-
Define own HTML helpers
HTML Helper definition
HTML Helper Invocation
@helper declarative syntax
HTML Helper should be placed to Views\Helper directory.
Helpers parameters (full language and ebugging support)
27 of 114
-
Visual Studio support
28 of 114
-
Razor Summary
A good new view engine
Code-focused templating
Fast and expressive
Compact syntax
Integrated with C# and VB
29 of 114
-
CREATING ASP .NET MVC APPLICATION
30 of 114
-
New Project
31
-
32 of 114
-
Select the project template
33
-
ASP .NET MVC App Home page
34
-
Run the application
35
-
Expand the default App menu
36
-
ADDING CONTROLLER
37 of 114
-
Adding controller
38
-
Adding controller (cont.)
39
-
Adding a controller (cont.)
40
-
Testing the controller
41
-
Mapping controller
Controller selection based on URL
Default URL routing logic:/[Controller]/[ActionName]/[Parameters]
Format for routing inApp_Start/RouteConfig.cs
42 of 114
-
URL routing
Webapp URL without URL segments => HomeController::Index()
Index() default method of a controller
/HelloWorld => HelloWorldController
/HelloWorld/Index => HelloWorldController::Index()
http://webapp:port/HelloWorld/Welcome =>HelloWorldController::Welcome()
43 of 114
-
Parameters
/HelloWorld/Welcome?name=Scott&numtimes=4
Introducing 2 parameters to Welcome method
Parameters passed as query strings!
44 of 114
-
URL Parameters
http://webapp/HelloWorld/Welcome/3?name=Rick
Parameter ID matches URL specification in RegisterRoutes method.
45 of 114
-
ADDING A VIEW
46 of 114
-
Views
Views created using Razor view engine
Controller method returns View object
Controller method return type is ActionResult
Common pattern: all view pages share the same master layout page
47 of 114
-
Create View page
48 of 114
-
Create View page
Master page.
49 of 114
-
Implementing View page
Selected master page. Index, by default.
Change controllers method signature.The method retures a view object:
searches a view file that is named the same as the method (Index.cshtml). 50 of 114
-
ViewBag
Pass data between view template and layout view file
ViewBag is a dynamic object(has no defined properties)
Layout view file.
View template file.
51 of 114
-
Passing data from Controller to View
View is used for data presentation
Controller must provide a view with the data
One approach: using ViewBag
Controller puts data to ViewBag,
View reads ViewBag and renders the data
No data binding!
Alternative approach: the view model
Strongly typed approach
52 of 114
-
Passing data from Controller to View
ControllerView
Returns HelloWorldView
object.
53 of 114
-
ADDING A MODEL
54 of 114
-
Model components
Entity framework - data access technology
Code first development paradigm(first code classes, then generate DB schema)
Database first development paradigmdefine db schema first, then generate models, controllers and views
55 of 114
-
Adding a model class
Enter the class name, e.g. Movie.cs
56 of 114
-
Adding properties to a model class
57 of 114
-
Adding a DbContext class
EF database contextFETCH, INSERT, UPDATE
EF namespaceDbContext
DbSet
58 of 114
-
DB Connection string
Separate connection string for each DbContex class
59 of 114
-
Accessing Model from a Controller
60 of 114
-
Accessing Model from a Controller
Visual Studio Creates: A controller MoviesController.cs
file in Controllers folder,Create.cshtml, Delete.cshtml, Details.cshtml, Index.cshtml in
Views\Movies folder.
Strongly typed approach.
61 of 114
-
Run Application
Notice: default routing
Creates a new movie.
Database is still empty. Notice: generic column name, derived from the
model class.
62 of 114
-
Creating a model object
Automatically generated form, based on the model info.
63 of 114
-
Generated Controller class
Instantiated DbContext instance.
Index method.
64 of 114
-
Strongly typed models
MVC provides strongly typed way of passing data from Controller to View
Better compile-time checking
Richer IntelliSense in VS code editor
65 of 114
-
Strongly typed models
Id parameter generally passed as a part of the route.
@model: Specifies class of the model
Context-sensitive data access.
Communicates with the master
page.
66 of 114
-
Strongly typed models (cont.)
Index.cshtml
Model object is strongly typed.Each item is a Movie object.
Full compile-time support.
67 of 114
-
Edit View
Localhost:1234/movies/Edit/4 URL generated using Html Helpers!
68 of 114
-
Edit View (cont.)
Parameter passed through the URL query. Works for MVC default URL mapping.
Label defined in the model class.
Date format defined in the model class.
69 of 114
-
Edit View
Generates hidden anti-forgery token.
Generates html label.
Generates text box.
Generates validation message.
70 of 114
-
Property annotations
Overrides default label name on the view page.
Workaround for a bug in Chrome
Annotations namespace.
Specifies type of the data: displays only date part.
71 of 114
-
ActionLink helper
Html.ActionLink generates a link according to a given URL mapping policy
Primer:Html.ActionLink(Edit", Edit", new{id=item.ID)}
Anonymous object specifies ID of an object
Controller action name.
72 of 114
-
Edit actions
Implemented as Controllers operations
HTTP GET operation HTTP POST operation
[HttpGet] annotation by default.
[Bind] attribute a security mechanism that
prevents over-posting data to the model.
Prevents request forgery
73 of 114
-
Processing the POST requestHTTP POST method. Validates the forgery token.
Checks if sent data are valid server side validation, compared to client-side validation (javascript)
Redirects after successful update.
In case of invalid data, the original form is returned back to the client, displaying error messages
74 of 114
-
HTTP methods best practices
HttpGet and HttpPost method overloads
All methods that modify data SHOULD use HttpPost method overload
Modifying data in HttpGet method security risk
Violates HTTP best practices
Violates REST architectural pattern
GET method SHOULD NOT have any side effect and SHOULD NOT modify persistent data
75 of 114
-
ADDING SEARCH
76 of 114
-
Search form Index.cshtml
Enter a text filtering value.
77 of 114
-
View/Controller changes
View (changes)Controller changed signature of
the method Index.
LINQ query definition (NOT execution!)
Lambda expressionDefault form
method = POST!
Use overriden BeginForm method to force HttpGet method.
78 of 114
-
Searching movies URL query
HTTP POST HTTP GET
79 of 114
-
Adding search by GenreHttpGet method handles
the request.
80 of 114
-
Search by Genre View
DropDown list markup.Parameter movieGenre is
the key for populating dropdown list from ViewBag.
Preselected value.
81 of 114
-
Search by Genre Controller
Key movieGenre is the same as the parameter of the dropdown list.
Populating the list of genres in
ViewBag.
82 of 114
-
Details method - Controller
83 of 114
-
Delete method - ControllerHttpGet method.
Selects an objects and returns Details page.
HttpPost method. Deletes an object
having the given id.
RULE: Never use a HttpGet method
to modify the model. Opens security holes, architecturally bad!
Asp .net maps a segment of URL to a method.
Attribute ActionName is necessary to provide valid URL
routing. The same URL maps to different action methods, based on used
HTTP method.
84 of 114
-
Data Validation
Keep Things DRY (Dont Repeat Yourself)
Declarative validation rules in one place(Model class) Regular expressions Range validation Length validation NULL values validation Data formatting
Validation rules enforced before saving changes to the database!
85 of 114
-
Validation rules Model
Several validation rules failed.
86 of 114
-
Data Validation - View
Client-side validation: javascript(jQuery).
Validation rules picked up from the model class annotations.
Validation messages derived from the validation constraints in the model
class.
87 of 114
-
Data Validation View (cont.)
Validation message derived from the validation constraints specified for
the given Property (Title)
88 of 114
-
Data Validation - Controller
HttpGet method displays initial Create form.
HttpPost method that does create a new object.
Server-side data validation check.
89 of 114
-
DataType attributes
Provide only hits for the view engine to format the data
Date, Time, PhoneNumber, EmailAddress,
Automatic provision of type specific featurese.g. mailto: ... link for EmailAddress
Do NOT provide any Validation (just presentation hints)
90 of 114
-
DisplayFormat annotation
Used to explicitly specify format of the data
Example: redefining the default date format
It is possible to specify validation properties in one line!
91 of 114
-
LAMBDA EXPRESSIONS
92 of 114
-
Introduction
Expressions that use special syntax
Anonymous functions used as data (variables, fields, parameters, return values)
The anonymous functions are used to create delegates and expression trees
Lambda expressions particularly helpful for writing LINQ queries
Available from .NET 4.5
93 of 114
-
Operator =>
Interpreted as goes to
Used for declaring a lambda expression
The same priority as assignment (=)
Right associative operator
Separates the parameters and function body
Left side
An Empty parameter list
A formal parameter list
An implicit parameter list
Right side
An expression
A Statement list inside curly brackects.
=>
94 of 114
-
Anonymous functions
Inline statements or expressions
Used wherever a delegate type is expected
It can initialize a named delegete
It can be passed as the parameter where a named delegate type is expected
Two kinds of anonymous functions
Anonymous methods
Lambda expressions
95 of 114
-
Evolution of delegates in C#
Named method
Inline code (anonymous method)
Lambda expression
96 of 114
-
Anonymous method
No name, no overloading
Created using the delegate keyword
It is possible to add multiple statementsinside its body
97 of 114
-
Anonymous method (cont.)
Scope of the parameters is the anonymous method block
No jump from inside an anonymous method block to the outside, and vice versa.
Cannot access ref and out parameters of an outer scope
No unsafe code access inside its block
Not allowed on the left side of the operator is.
98 of 114
-
Expression lambdas
Lambda expression with an expression on the right side of the operator =>
Used dominantly in construction of expression trees
(input parameters) => expression
Parentheses optional if lambda has one param.
Input parameters separated by comma
99 of 114
-
Expression lambdas - examples
(x, y) => x == yThe parameters types inferred by the compiler
(int x, string s) => s.Length > xSpecify types of the parameters when the compiler cannot inferre them from the code.
() => SomeMethod()Zero input parameters specified with empty parentheses. Note: a method call cannot be evaluated outside the .NET Framework (e.g. SQL Server)
100 of 114
-
Statement lambdas
(input parameters) => {statement;}
Statements enclosed in braces
The body of a statement lambda can contain multiple statements (in practices, two-three)
Cannot be used to create expression trees
101 of 114
-
Generic delegates Func
System.FuncT argument type, TResult return type (last type parameter)
Useful for encapsulating user-defined expressions that are applied to all elements of a data set
A generic declaration of the delegate Func.
Example of usage.
102 of 114
-
Func delegate (cont.)
A lambda expression can be passed where Expression type is required
System.Linq.Queryable
Compiler can infere the type of the parameter n.
Output: 5, 4, 1, 3
Output: 5, 1, 3, 9, 7
Output: 5, 4
103 of 114
-
Type inference in lambdas
Compiler can infer the type of the parameters based on:
Lambdas body
Parameters delegate type
Example:IEnumerable customers=...
Standard query operator.
104 of 114
-
Lambda expressions general rules
The lambda must contain the same number of parameters as the delegate type
Each input parameter in the lambda must be implicitly convertible to its corresponding delegate parameter
The return value of the lambda (if any) must be implicitly convertible to the delegates return type
105 of 114
-
Lambda expressions - examples
Func f1 = x => x+1;
Func f2 = x => {return x+1;}
Func f3 = (int x) => x +1;
Func f4 = (int x) => {return x+1;}
Func f7 = delegate(int x) {return x+1;}
Invocation example: Console.Writeln(f1.Invoke(4));
106 of 114
-
Lambda expressions - examples
Func f5= (x,y) => x*yInvocation: Console.Writeln(f5.Invoke(2,2));
Action f6 = () => Console.Writeline();Function instance that does not receive any parameter nor returns value.Invocation: f6.Invoke();
Func f8 = delegate { return 1+1;}Invocation: Console.Writeln(f8());
107 of 114
-
LINQLanguage Integrated Query
108 of 114
-
Content
Undestand what LINQ is?
Learn what problems solves
See what its syntax looks like
Know where LINQ can be used
109 of 114
-
What is LINQ?
Language INtegrated Query
It is part of programming language syntax
Supported by: C#, VB, Delphi Prism
Used for querying data
Supported the following types of data sources
Relational data
XML data
objects
110 of 114
-
LINQ Architecture
111 of 114
-
ADO .NET vs. LINQ
ADO .NET
OO library for relational data access
Mapping from relational to OO objects needed!
High Impedance Missmatchfor mapping data from storage to objects in an application
LINQ
SQL-Like syntax that deals with pure objects
Reduces the Impedance Missmatch
Makes data querying more efficient
One still must know the format of the data
112
-
LINQ Adapters
LINQ to Objects
LINQ to SQL
LINQ to XML
LINQ to Entities
It is possible to create own customized adapter
E.g. LINQ for Querying Twitter API
113 of 114
-
References
ASP .NET MVC 5 Tutorial Officialhttp://www.asp.net/mvc/tutorials/mvc-5/introduction/getting-started
Lambda expressionshttp://www.dotnetperls.com/lambda
LINQhttp://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
114 of 114