asp .net mvc 5
TRANSCRIPT
![Page 1: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/1.jpg)
ASP .NET MVC 5
Nemanja Kojic, MScEE
1
![Page 2: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/2.jpg)
What is MVC?
• Model-View-Controller (MVC)
• Standard Architectural Pattern
• Separation of concerns:model, view, controller
2 of 114
![Page 3: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/3.jpg)
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
![Page 4: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/4.jpg)
ASP .NET MVC Framework Components
• Models– Business/domain logic– Model objects, retrieve and store model state in a
persistent storage (database).
• Views– Display application’s 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
![Page 5: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/5.jpg)
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
![Page 6: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/6.jpg)
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
![Page 7: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/7.jpg)
ASP .NET MVC Features (cont.)
• Support for Dependency Injection (DI)
– Injecting objects into a class
– Class doesn’t 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
![Page 8: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/8.jpg)
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
![Page 9: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/9.jpg)
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
![Page 10: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/10.jpg)
ASP .NET App Structure
• No Postbackinteraction!
• All user interactions routed to a controller
• No view state and page lifecycle events
10 of 114
![Page 11: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/11.jpg)
MVC App Execution
• Entry points to MVC:
– UrlRoutingModule and MvcRouteHandler
• Request handling:
– Select appropriate controller
– Obtain a specific controller instance
– Call the controller’s Execute method
11 of 114
![Page 12: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/12.jpg)
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
![Page 13: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/13.jpg)
MVC App Execution
13 of 114
![Page 14: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/14.jpg)
RAZOR ENGINEBUILDING VIEW PAGES USING RAZOR LANGUAGE
14 of 114
![Page 15: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/15.jpg)
Razor Engine
• A new view-engine
• Optimized around HTML generation
• Code-focused templating approach
15 of 114
![Page 16: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/16.jpg)
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
![Page 17: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/17.jpg)
Razor – HelloWorld
• Uses @ for Razor blocks
.aspx file
razor file
17 of 114
![Page 18: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/18.jpg)
Loops and Nested HTML
.aspx syntaxRazor syntax
18 of 114
![Page 19: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/19.jpg)
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
![Page 20: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/20.jpg)
Integrating Content and Code
Parser examines right-hand side of @ character.
Identifying nested content with HTML
block tag
20 of 114
![Page 21: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/21.jpg)
Layout/Master page
SiteLayout.cshtml
@RenderBody()Including specific body content.
21 of 114
![Page 22: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/22.jpg)
Content page
Explicitly setting LayoutPage property.
Complete HTML page.
22 of 114
![Page 23: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/23.jpg)
Master page – section overrides
This section is optional.
This section is optional.
23 of 114
![Page 24: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/24.jpg)
Master page – section overrides
Named section.
Named section.
24 of 114
![Page 25: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/25.jpg)
Master page – result html
25 of 114
![Page 26: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/26.jpg)
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
![Page 27: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/27.jpg)
Define own HTML helpers
HTML Helper definition
HTML Helper Invocation
@helper declarative syntax
HTML Helper should be placed to Views\Helper directory.
Helper’s parameters (full language and ebugging support)
27 of 114
![Page 28: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/28.jpg)
Visual Studio support
28 of 114
![Page 29: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/29.jpg)
Razor – Summary
• A good new view engine
• Code-focused templating
• Fast and expressive
• Compact syntax
• Integrated with C# and VB
29 of 114
![Page 30: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/30.jpg)
CREATING ASP .NET MVC APPLICATION
30 of 114
![Page 31: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/31.jpg)
New Project …
31
![Page 32: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/32.jpg)
32 of 114
![Page 33: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/33.jpg)
Select the project template
33
![Page 34: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/34.jpg)
ASP .NET MVC App Home page
34
![Page 35: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/35.jpg)
Run the application…
35
![Page 36: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/36.jpg)
Expand the default App menu
36
![Page 37: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/37.jpg)
ADDING CONTROLLER
37 of 114
![Page 38: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/38.jpg)
Adding controller
38
![Page 39: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/39.jpg)
Adding controller (cont.)
39
![Page 40: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/40.jpg)
Adding a controller (cont.)
40
![Page 41: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/41.jpg)
Testing the controller
41
![Page 42: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/42.jpg)
Mapping controller
• Controller selection based on URL
• Default URL routing logic:/[Controller]/[ActionName]/[Parameters]
• Format for routing inApp_Start/RouteConfig.cs
42 of 114
![Page 43: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/43.jpg)
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
![Page 44: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/44.jpg)
Parameters
• /HelloWorld/Welcome?name=Scott&numtimes=4
• Introducing 2 parameters to Welcome method
• Parameters passed as query strings!
44 of 114
![Page 45: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/45.jpg)
URL Parameters
• http://webapp/HelloWorld/Welcome/3?name=Rick
Parameter ID matches URL specification in RegisterRoutes method.
45 of 114
![Page 46: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/46.jpg)
ADDING A VIEW
46 of 114
![Page 47: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/47.jpg)
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
![Page 48: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/48.jpg)
Create View page
48 of 114
![Page 49: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/49.jpg)
Create View page
Master page.
49 of 114
![Page 50: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/50.jpg)
Implementing View page
Selected master page. Index, by default.
Change controller’s 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
![Page 51: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/51.jpg)
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
![Page 52: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/52.jpg)
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
![Page 53: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/53.jpg)
Passing data from Controller to View
ControllerView
Returns HelloWorldView
object.
53 of 114
![Page 54: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/54.jpg)
ADDING A MODEL
54 of 114
![Page 55: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/55.jpg)
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
![Page 56: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/56.jpg)
Adding a model class
Enter the class name, e.g. Movie.cs
56 of 114
![Page 57: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/57.jpg)
Adding properties to a model class
57 of 114
![Page 58: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/58.jpg)
Adding a DbContext class
EF database contextFETCH, INSERT, UPDATE
EF namespaceDbContext
DbSet
58 of 114
![Page 59: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/59.jpg)
DB Connection string
Separate connection string for each DbContex class
59 of 114
![Page 60: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/60.jpg)
Accessing Model from a Controller
60 of 114
![Page 61: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/61.jpg)
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
![Page 62: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/62.jpg)
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
![Page 63: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/63.jpg)
Creating a model object
Automatically generated form, based on the model info.
63 of 114
![Page 64: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/64.jpg)
Generated Controller class
Instantiated DbContext instance.
Index method.
64 of 114
![Page 65: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/65.jpg)
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
![Page 66: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/66.jpg)
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
![Page 67: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/67.jpg)
Strongly typed models (cont.)
Index.cshtml
Model object is strongly typed.Each item is a Movie object.
Full compile-time support.
67 of 114
![Page 68: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/68.jpg)
Edit View
Localhost:1234/movies/Edit/4 URL generated using Html Helpers!
68 of 114
![Page 69: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/69.jpg)
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
![Page 70: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/70.jpg)
Edit View
Generates hidden anti-forgery token.
Generates html label.
Generates text box.
Generates validation message.
70 of 114
![Page 71: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/71.jpg)
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
![Page 72: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/72.jpg)
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
![Page 73: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/73.jpg)
Edit actions
• Implemented as Controller’s 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
![Page 74: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/74.jpg)
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
![Page 75: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/75.jpg)
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
![Page 76: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/76.jpg)
ADDING SEARCH
76 of 114
![Page 77: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/77.jpg)
Search form – Index.cshtml
Enter a text filtering value.
77 of 114
![Page 78: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/78.jpg)
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
![Page 79: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/79.jpg)
Searching movies – URL query
HTTP POST HTTP GET
79 of 114
![Page 80: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/80.jpg)
Adding search by GenreHttpGet method handles
the request.
80 of 114
![Page 81: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/81.jpg)
Search by Genre – View
DropDown list markup.Parameter “movieGenre” is
the key for populating dropdown list from ViewBag.
Preselected value.
81 of 114
![Page 82: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/82.jpg)
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
![Page 83: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/83.jpg)
Details method - Controller
83 of 114
![Page 84: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/84.jpg)
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
![Page 85: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/85.jpg)
Data Validation
• Keep Things DRY (Don’t 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
![Page 86: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/86.jpg)
Validation rules – Model
Several validation rules failed.
86 of 114
![Page 87: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/87.jpg)
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
![Page 88: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/88.jpg)
Data Validation – View (cont.)
Validation message derived from the validation constraints specified for
the given Property (Title)
88 of 114
![Page 89: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/89.jpg)
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
![Page 90: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/90.jpg)
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
![Page 91: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/91.jpg)
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
![Page 92: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/92.jpg)
LAMBDA EXPRESSIONS
92 of 114
![Page 93: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/93.jpg)
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
![Page 94: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/94.jpg)
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
![Page 95: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/95.jpg)
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
![Page 96: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/96.jpg)
Evolution of delegates in C#
Named method
Inline code (anonymous method)
Lambda expression
96 of 114
![Page 97: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/97.jpg)
Anonymous method
• No name, no overloading
• Created using the delegate keyword
• It is possible to add multiple statementsinside its body
97 of 114
![Page 98: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/98.jpg)
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
![Page 99: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/99.jpg)
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
![Page 100: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/100.jpg)
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
![Page 101: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/101.jpg)
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
![Page 102: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/102.jpg)
Generic delegates – Func
• System.Func<T,TResult>T – 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
![Page 103: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/103.jpg)
Func delegate (cont.)
• A lambda expression can be passed where Expression<Func> 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
![Page 104: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/104.jpg)
Type inference in lambdas
• Compiler can infer the type of the parameters based on:
– Lambda’s body
– Parameter’s delegate type
• Example:IEnumerable<Customer> customers=...
Standard query operator.
104 of 114
![Page 105: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/105.jpg)
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 delegate’s return type
105 of 114
![Page 106: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/106.jpg)
Lambda expressions - examples
• Func<int,int> f1 = x => x+1;
• Func<int,int> f2 = x => {return x+1;}
• Func<int,int> f3 = (int x) => x +1;
• Func<int,int> f4 = (int x) => {return x+1;}
• Func<int,int> f7 = delegate(int x) {return x+1;}
• Invocation example: Console.Writeln(f1.Invoke(4));
106 of 114
![Page 107: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/107.jpg)
Lambda expressions - examples
• Func<int,int,int> 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<int> f8 = delegate { return 1+1;}Invocation: Console.Writeln(f8());
107 of 114
![Page 108: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/108.jpg)
LINQLanguage Integrated Query
108 of 114
![Page 109: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/109.jpg)
Content
• Undestand what LINQ is?
• Learn what problems solves
• See what its syntax looks like
• Know where LINQ can be used
109 of 114
![Page 110: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/110.jpg)
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
![Page 111: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/111.jpg)
LINQ Architecture
111 of 114
![Page 112: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/112.jpg)
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
![Page 113: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/113.jpg)
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
![Page 114: ASP .NET MVC 5](https://reader034.vdocument.in/reader034/viewer/2022042513/586a1a5b1a28aba27d8bc232/html5/thumbnails/114.jpg)
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