SlideShare a Scribd company logo
MVC Internals &
Extensibility

  Eyal Vardi
  CEO E4D Solutions LTD
  Microsoft MVP Visual C#
  blog: www.eVardi.com
Agenda
           Routing

           Dependency Resolver

           Controller Extensibility

           Model Extensibility

           View Extensibility




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
MVC in ASP.NET




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
ASP.NET vs. ASP.NET MVC




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
MVC Execution Process
                                     ASP.NET




                   IIS                Routing                                ASP.NET
                                                                             MVC 3.0




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
URL Routing
     URL to Page
     http://Domain/Path




     URL to Controller

     http://Domain/.../..




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Routes
           A route is a URL pattern that is mapped to a
            handler.
                  The handler can be a physical file, such as an .aspx file in a
                   Web Forms application.
                  A handler can also be a class that processes the request,
                   such as a controller in an MVC application.

            protected void Application_Start()                               Global.asax
            {
                RouteTable
                  .Routes
                  .MapRoute(
                     "Default",    // Route name
                     "{controller}/{action}/{id}", // URL template
                     new { controller="Calc", action="Add", id=UrlParameter.Optional }
                   );
            }

© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
URL Patterns in MVC Applications

           {Controller} / {Action} / {id}

           Query / {queryname} / {*queryvalues}
                  “*” This is referred to as a catch-all parameter.


           /query/select/bikes/onsale
                  queryname = "select" , queryvalues = "bikes/onsale"




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
URL Routing Pipeline




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Adding Constraints to Routes
           Constraints are defined by using regular
            expressions string or by using objects that
            implement the IRouteConstraint interface.
            protected void Application_Start()                         Global.asax
            {
                RouteTable
                  .Routes
                  .MapRoute(
                     "Blog",
                     "Posts/{postDate}",
                     new { controller="Blog",action="GetPosts" }
                   );
            }
                  /Posts/28-12-71 => BlogController,GetPosts( “28-12-1971” )
                  /Post/28        => BlogController,GetPosts( “28” )
                  /Post/test      => BlogController,GetPosts( “test” )


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
IRouteConstraint
          protected void Application_Start()                               Global.asax
          {
              RouteTable
                .Routes
                .MapRoute(
                   "Default",    // Route name
                   "{controller}/{action}/{id}", // URL template
                   new { controller="Calc", action="Add", id=UrlParameter.Optional },
                   new { action = new MyRouteConstraint() }
                 );
          }
                                                     Custom Route Constraint




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Regular Expression Route
   Constraint
          protected void Application_Start()
          {
              RouteTable
                .Routes
                .MapRoute(
                   "Default",    // Route name
                   "{controller}/{action}/{id}", // URL template
                   new { controller="Calc", action="Add", id=UrlParameter.Optional },
                   new { action = @"d{2}-d{2}-d{4}" }
                 );
          }
                                                           Regular Expression




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Route lifecycle




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Routing Process


                 Route                    MvcRouteHandler                  MvcHandler        Controller




                                                                       IDependencyResolver




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Route
            Constraint


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Routing Summary
           URL Templates
                  Default values
                  Namespaces
                  Constraint

           IRouteHandler

           RouteBase




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Dependency Resolver
           Service locator for the framework.
           protected void Application_Start()
           {
               ...

                  DependencyResolver.SetResolver(new TraceDependencyResolver() );
           }




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Trace Dependency Resolver




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Dependency Resolver


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Controller Extensibility




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Understanding Controllers
           MVC controllers are responsible for
            responding to requests made against an
            ASP.NET MVC website.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Controller Class




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Creation of the Controller
           IControllerFactory
            Responsible for determining the
            controller to service the request.
           IControllerActivator
            Responsible for creating the
            controller
           DefaultControllerFactory has
            internal class called
            DefaultControllerActivator.


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Creation of the Controller
  Request
                  Routing                                   MvcRouteHandler                   MvcHandler




          Dependency              Controller               Dependency            Controller
           Resolver                                         Resolver                          Controller
                                   Factory                                       Activator




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
How Controller
            Created?

© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Controller Summary
           MvcHandler

           IControllerFactory

           IControllerActivator




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
The Action Execution
  Request
                  Routing                                   MvcRouteHandler                    MvcHandler




          Dependency              Controller               Dependency             Controller
           Resolver                                         Resolver                           Controller
                                   Factory                                        Activator




                                                                                  Action        Action
                                                                                 Invoker        Method




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
The Action Execution
           Once the controller has been instantiated, the
            specified action has to be executed, and this
            is handled by the IActionInvoker.
                  If you derived your controller from the Controller class, then
                   this is the responsibility of an action invoker.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
The Action Execution


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Built-In Action Invoker
           Finds a method that has the
            same name as the requested
            action.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Action Name
           You can then accept an action name that
            wouldn’t be legal as a C# method name.
                  [ActionName("User-Registration")]
                  [ActionNameSelector]




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Action Method Selection
           The action invoker uses an action method
            selector to remove ambiguity when selecting
            an action.
           The invoker gives preference to the actions
            that have selectors.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Action Method Selector
           You return true from IsValidForRequest if the
            method is able to process a request, and false
            otherwise.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Method
            Selector


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Handling Unknown Actions




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Action Summary
           IActionInvoker

           Action Name Selector

           Action Method Selector

           Handling Unknown Actions




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Model Extensibility




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
What Is a Model?
                                                                                     Model Binding
                                                           Model

                                                                                     Deserialization



       HTML                                   View                      Controller            HTTP

            Template




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
HTTP to .NET Classes

        public ActionResult Index(Reservation reservation)
        {
             // TODO BL.
             return View( reservation );
        }                                            Deserialization




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
HTTP to .NET Args




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Model Binders
           Binders are like type converters, because they
            can convert HTTP requests into objects that
            are passed to an action method.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
DefaultModelBinder Class
           Translate HTTP request into
            complex models, including
            nested types and arrays.
                  URL
                  Form data, Culture - Sensitive


            1.     Request.Form

            2.     RoutedData.Values
                                                                (Key,Value)
            3.     Request.QueryString

            4.     Request.Files


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Model Binder Types
           ByteArrayModelBinder

           LinqBinaryModelBinder

           FormCollectionModelBinder

           HttpPostedFileBaseModelBinder

           DefaultModelBinder




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Binding to Complex Types
        [DisplayName("Book")]                                                    Model
        public class E4DBook
        {
               [Display(Name = "Title")]
                public string E4DTitle { get; set; }

                     public Reservation MyReservation { get; set; }
        }



        @Html.LabelFor(model => model.MyReservation.FlightNum)                   View
        @Html.EditorFor(model => model.MyReservation.FlightNum)


                                                                                 Html
       <label for="MyReservation_FlightNum">FlightNum</label>

       <input type="text" value=""
            id   = "MyReservation_FlightNum"
            name = "MyReservation.FlightNum"                         />

© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Specifying Custom Prefixes
                                                                                      Controller
        public ActionResult Index(
                Reservation res1 ,
                [Bind(Prefix="myRes")] Reservation res2 ) { ... }




      <!– First Arg -->                                                                     Html
      <label for="FlightNum">FlightNum</label>
      <input type="text" id="FlightNum" name="FlightNum"                         />

      ...

      <!– Second Arg -->
      <label for="MyRes_FlightNum">FlightNum</label>
      <input type="text" id="MyRes_FlightNum" name="MyRes.FlightNum"                   />




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Bind Attribute (“View”)
           Represents an attribute that is used to provide
            details about how model binding to a
            parameter should occur.


            [Bind(Include = "FlightNum, TravelDate)]
            public class Reservation
            {
                public int FlightNum { get; set; }
                public DateTime TravelDate { get; set; }
                public int TicketCount { get; set; }
                public int DiscountPercent { get; set; }
            }




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Bind Attribute


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Binding to a String Collections
                                                                                 Controller
        public ActionResult Index( List< string > reservation ) { ... }




                                                                                    Html
      <input      type="text"        name="reservation"              />
      <input      type="text"        name="reservation"              />
      <input      type="text"        name="reservation"              />
      <input      type="text"        name="reservation"              />




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Binding to a Collections
                                                                                      Controller
        public ActionResult Index( List<Reservation> reservation ) { ... }




       <!– Option I-->                                                                   Html
       <input type="text" name="[0].Name"                       />
       <input type="text" name="[1].Name"                        />

       <!– Option II -->
       <input type="hidden" name="Index" value="f1"                              />
       <input type="text" name="[f1].Name" />

       <input type="hidden" name="Index" value="f2"                              />
       <input type="text" name="[f2].Name" />




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Binding to a Dictionary
                                                                                      Controller
        public ActionResult Index( Dictionary<Reservation> reservation ) { ... }




                                                                                         Html
       <input type="hidden" name="[0].key" value="f1"                            />
       <input type="text" name="[0].value.Name" />

       <input type="hidden" name="[1].key" value="f2"                            />
       <input type="text" name="[1].value.Name" />




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Model Binders
           ASP.NET MVC allows us to override both the
            default model binder, as well as add custom
            model binders.
            ModelBinders.Binders.DefaultBinder = new CustomDefaultBinder();

            ModelBinders.Binders.Add(
                   typeof(DateTime),
                   new DateTimeModelBinder() );




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
ModelBinder Attribute
           Represents an attribute that is used to
            associate a model type to a model-builder
            type.
            public ActionResult Contact(
              [ModelBinder(typeof(ContactBinder))] Contact contact )
            {
                   ViewData["name"]    = contact.Name;
                   ViewData["email"]   = contact.Email;
                   ViewData["message"] = contact.Message;
                   ViewData["title"]   = "Succes!";

                     return View();
            }




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Binder


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Model Summary
           Http to .NET Classes
                  IModelBinder
                  IValueProvider
                  ModelMetadataProvider
                  BindAttribute

           Validation
                  Data Annotations
                  IValidateObject




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Action Results
           A controller action returns
            something called an action result.
           Action results types:
                  ViewResult                                   FileContentResult

                  EmptyResult                                  FilePathResult

                  RedirectResult                               FileStreamResult

                  JsonResult                                   HttpNotFoundResult

                  JavaScriptResult                             HttpRedirectResult

                  ContentResult                                HttpStatusCodeResult

© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Action Result


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
ASP.NET MVC Filters
           Filters are custom classes that provide both a
            declarative and programmatic means to add
            pre-action and post-action behavior to
            controller action methods.

                      [HandleError]
                      [Authorize]
                      public class CourseController : Controller
                      {
                         [OutputCache]
                         [RequireHttps]
                         public ActionResult Net( string name )
                         {
                             ViewBag.Course = BL.GetCourse(name);
                             return View();
                         }
                      }
© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Filter Interfaces

                                           Action Method                   Action Result




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Filter Order
           Filters run in the following order:
                  Authorization filters

                  Action filters

                  Response filters

                  Exception filters




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Controller & Filters
           The Controller class implements each of the
            filter interfaces.
           You can implement any of the filters for a
            specific controller by overriding the
            controller's On<Filter> method.
                  OnAuthorization
                  OnActionExecuting
                  OnActionExecuted
                  OnResultExecuting
                  OnResultExecuted
                  OnException


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
IAuthorizationFilter
           Make security decisions about whether to
            execute an action method.
                  AuthorizeAttribute

                  RequireHttpsAttribute




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
IActionFilter Interface
           OnActionExecuting
                  Runs before the action method.

           OnActionExecuted
                  Runs after the action method




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
IResultFilter Interface
             OnResultExecuting
                  Runs before the ActionResult object is executed.

           OnResultExecuted
                  Runs after the result.
                  Can perform additional processing of the result.
                  The OutputCacheAttribute is one example of a result filter.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
IExceptionFilter
           Execute if there is an unhandled exception
            thrown during the execution of the ASP.NET
            MVC pipeline.
                  Can be used for logging or displaying an error page.

                  HandleErrorAttribute is one example of an exception filter.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Handle Error Attribute
           You can specify an exception and the names
            of a view and layout.
           Works only when custom errors
            are enabled in the Web.config file
                  <customErrors mode="On" /> inside
                   the <system.web>


           The view get
            HandleErrorInfo




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
First                    Global                    Controller                 Action           Last
   Filter I                   Filter I                    Filter I                 Filter I       Filter I
   Filter II                  Filter II                   Filter II                Filter II      Filter II


                                          Action Method                   Action Result




      Authorization                          Action                         Result              Exception
       Filter I                        Filter I     Filter I          Filter I     Filter I    Filter II
        Filter I                                                                                Filter II
           Filter I                                                                                Filter II
             Filter I                  Filter I     Filter I          Filter I     Filter I          Filter II
               Filter I                                                                                Filter II
                                       Filter I     Filter I          Filter I     Filter I
      Filter II
       Filter II                       Filter I     Filter I          Filter I                 Filter I
          Filter II                                                                Filter I     Filter I
            Filter II                                                                              Filter I
              Filter II                Filter I     Filter I          Filter I     Filter I          Filter I
                                                                                                       Filter I
© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Action

                                    Before              After
                                   Filter I         Filter II
                                   Filter I         Filter II
                                   Filter I         Filter II
                                   Filter I         Filter II
                                   Filter I         Filter II
                                   Filter II        Filter I
                                   Filter II        Filter I
                                   Filter II        Filter I
                                   Filter II        Filter I
                                   Filter II        Filter I




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Controller Context
                        1                                                            6




                        2                               3                        4   5




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Filters


© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Filter
           You can create a filter in the following ways:
                  Override one or more of the controller's On<Filter>
                   methods.

                  Create an attribute class that derives from
                   ActionFilterAttribute or FilterAttribute.
                  Register a filter with the filter provider
                   (the FilterProviders class).

                  Register a global filter using the GlobalFilterCollection class.




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Custom Filter




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
The Filter Provider Interface




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Filter Providers
           By default, ASP.NET MVC registers the
            following filter providers:
                  Filters for global filters.

                  FilterAttributeFilterProvider for filter attributes.

                  ControllerInstanceFilterProvider for controller instances.

           The GetFilters method returns all of the
            IFilterProvider instances in the service
            locator.



© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Filter Summary
           Custom Filters
                  IAuthorizationFilter
                  IActionFilter
                  IResultFilter
                  IExceptionFilter


           IFilterProvider




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
View Extensibility




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
Creating a Custom View Engine




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
View Summary
           IViewEngine
                  How to find the view?

           IView
                  Render




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il
MVC Internals & Extensibility Summary

                                       Mvc
           Routing                 RouteHandler
                                                           MvcHandler



          Dependency              Controller              Dependency             Controller
           Resolver                                        Resolver                              Controller
                                   Factory                                       Activator

             Action                 Name                    Method               Authorization    Model
            Invoker                Selector                Selectror                 Filter       Bind

            Action                  Action                   Action               Result           View
             Filer                  Method                    Filer               Filter          Engine

                                     Result               Exception
             View
                                     Filter                 Filter




© 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: Eyal@E4D.co.il

More Related Content

PPTX
AMD & Require.js
PPTX
OOP in JavaScript
PPTX
Forms in AngularJS
PPTX
Web api crud operations
PPT
Triggers, actions & behaviors in XAML
PDF
Backbone testing
PPTX
Prism Navigation
AMD & Require.js
OOP in JavaScript
Forms in AngularJS
Web api crud operations
Triggers, actions & behaviors in XAML
Backbone testing
Prism Navigation

Similar to Asp.net mvc internals & extensibility (20)

PPTX
Asp.Net Mvc Internals &amp; Extensibility
PPTX
Asp.net web api extensibility
PPTX
ASP.NET Routing & MVC
PPTX
Murach : HOW to work with controllers and routing
PPT
ASP .net MVC
PDF
Asp.Net MVC Framework Design Pattern
PPTX
Asp.Net Mvc
PDF
Custom URL Re-Writing/Routing using Attribute Routes in MVC 4 Web APIs
PDF
ASP.NET MVC - Whats The Big Deal
PPTX
Mvc3 part2
PPTX
Asp.net mvc filters
PPTX
Asp.Net MVC3 - Basics
DOC
Custom routing in asp.net mvc
PPTX
How to get full power from WebApi
PPTX
Build your web app with asp.net mvc 2 from scratch
PDF
PPTX
ASP.Net MVC 4 [Part - 2]
PPTX
Web api routing
PPT
CTTDNUG ASP.NET MVC
PDF
ASP NET MVC in Action 1st Edition Jeffrey Palermo
Asp.Net Mvc Internals &amp; Extensibility
Asp.net web api extensibility
ASP.NET Routing & MVC
Murach : HOW to work with controllers and routing
ASP .net MVC
Asp.Net MVC Framework Design Pattern
Asp.Net Mvc
Custom URL Re-Writing/Routing using Attribute Routes in MVC 4 Web APIs
ASP.NET MVC - Whats The Big Deal
Mvc3 part2
Asp.net mvc filters
Asp.Net MVC3 - Basics
Custom routing in asp.net mvc
How to get full power from WebApi
Build your web app with asp.net mvc 2 from scratch
ASP.Net MVC 4 [Part - 2]
Web api routing
CTTDNUG ASP.NET MVC
ASP NET MVC in Action 1st Edition Jeffrey Palermo
Ad

More from Eyal Vardi (20)

PPTX
Why magic
PPTX
Smart Contract
PDF
Rachel's grandmother's recipes
PPTX
Performance Optimization In Angular 2
PPTX
Angular 2 Architecture (Bucharest 26/10/2016)
PPTX
Angular 2 NgModule
PPTX
Upgrading from Angular 1.x to Angular 2.x
PPTX
Angular 2 - Ahead of-time Compilation
PPTX
Routing And Navigation
PPTX
Angular 2 Architecture
PPTX
Angular 1.x vs. Angular 2.x
PPTX
Angular 2.0 Views
PPTX
Component lifecycle hooks in Angular 2.0
PPTX
Template syntax in Angular 2.0
PPTX
Http Communication in Angular 2.0
PPTX
Angular 2.0 Dependency injection
PPTX
Angular 2.0 Routing and Navigation
PPTX
Async & Parallel in JavaScript
PPTX
Angular 2.0 Pipes
PPTX
Angular 2.0 forms
Why magic
Smart Contract
Rachel's grandmother's recipes
Performance Optimization In Angular 2
Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 NgModule
Upgrading from Angular 1.x to Angular 2.x
Angular 2 - Ahead of-time Compilation
Routing And Navigation
Angular 2 Architecture
Angular 1.x vs. Angular 2.x
Angular 2.0 Views
Component lifecycle hooks in Angular 2.0
Template syntax in Angular 2.0
Http Communication in Angular 2.0
Angular 2.0 Dependency injection
Angular 2.0 Routing and Navigation
Async & Parallel in JavaScript
Angular 2.0 Pipes
Angular 2.0 forms
Ad

Recently uploaded (20)

PDF
Chapter 2 Digital Image Fundamentals.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PDF
Sensors and Actuators in IoT Systems using pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
HCSP-Presales-Campus Network Planning and Design V1.0 Training Material-Witho...
PDF
Modernizing your data center with Dell and AMD
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PPT
Teaching material agriculture food technology
PDF
Advanced IT Governance
PDF
Review of recent advances in non-invasive hemoglobin estimation
Chapter 2 Digital Image Fundamentals.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
CIFDAQ's Market Insight: SEC Turns Pro Crypto
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
Sensors and Actuators in IoT Systems using pdf
Spectral efficient network and resource selection model in 5G networks
MYSQL Presentation for SQL database connectivity
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
HCSP-Presales-Campus Network Planning and Design V1.0 Training Material-Witho...
Modernizing your data center with Dell and AMD
GamePlan Trading System Review: Professional Trader's Honest Take
Teaching material agriculture food technology
Advanced IT Governance
Review of recent advances in non-invasive hemoglobin estimation

Asp.net mvc internals & extensibility

  • 1. MVC Internals & Extensibility Eyal Vardi CEO E4D Solutions LTD Microsoft MVP Visual C# blog: www.eVardi.com
  • 2. Agenda  Routing  Dependency Resolver  Controller Extensibility  Model Extensibility  View Extensibility © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 3. MVC in ASP.NET © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 4. ASP.NET vs. ASP.NET MVC © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 5. MVC Execution Process ASP.NET IIS Routing ASP.NET MVC 3.0 © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 6. URL Routing URL to Page http://Domain/Path URL to Controller http://Domain/.../.. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 7. Routes  A route is a URL pattern that is mapped to a handler.  The handler can be a physical file, such as an .aspx file in a Web Forms application.  A handler can also be a class that processes the request, such as a controller in an MVC application. protected void Application_Start() Global.asax { RouteTable .Routes .MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL template new { controller="Calc", action="Add", id=UrlParameter.Optional } ); } © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 8. URL Patterns in MVC Applications  {Controller} / {Action} / {id}  Query / {queryname} / {*queryvalues}  “*” This is referred to as a catch-all parameter.  /query/select/bikes/onsale  queryname = "select" , queryvalues = "bikes/onsale" © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 9. URL Routing Pipeline © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 10. Adding Constraints to Routes  Constraints are defined by using regular expressions string or by using objects that implement the IRouteConstraint interface. protected void Application_Start() Global.asax { RouteTable .Routes .MapRoute( "Blog", "Posts/{postDate}", new { controller="Blog",action="GetPosts" } ); } /Posts/28-12-71 => BlogController,GetPosts( “28-12-1971” ) /Post/28 => BlogController,GetPosts( “28” ) /Post/test => BlogController,GetPosts( “test” ) © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 11. IRouteConstraint protected void Application_Start() Global.asax { RouteTable .Routes .MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL template new { controller="Calc", action="Add", id=UrlParameter.Optional }, new { action = new MyRouteConstraint() } ); } Custom Route Constraint © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 12. Regular Expression Route Constraint protected void Application_Start() { RouteTable .Routes .MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL template new { controller="Calc", action="Add", id=UrlParameter.Optional }, new { action = @"d{2}-d{2}-d{4}" } ); } Regular Expression © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 13. Route lifecycle © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 14. Routing Process Route MvcRouteHandler MvcHandler Controller IDependencyResolver © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 15. Custom Route Constraint © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 16. Routing Summary  URL Templates  Default values  Namespaces  Constraint  IRouteHandler  RouteBase © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 17. Dependency Resolver  Service locator for the framework. protected void Application_Start() { ... DependencyResolver.SetResolver(new TraceDependencyResolver() ); } © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 18. Trace Dependency Resolver © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 19. Dependency Resolver © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 20. Controller Extensibility © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 21. Understanding Controllers  MVC controllers are responsible for responding to requests made against an ASP.NET MVC website. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 22. Controller Class © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 23. Creation of the Controller  IControllerFactory Responsible for determining the controller to service the request.  IControllerActivator Responsible for creating the controller  DefaultControllerFactory has internal class called DefaultControllerActivator. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 24. Creation of the Controller Request Routing MvcRouteHandler MvcHandler Dependency Controller Dependency Controller Resolver Resolver Controller Factory Activator © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 25. How Controller Created? © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 26. Controller Summary  MvcHandler  IControllerFactory  IControllerActivator © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 27. The Action Execution Request Routing MvcRouteHandler MvcHandler Dependency Controller Dependency Controller Resolver Resolver Controller Factory Activator Action Action Invoker Method © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 28. The Action Execution  Once the controller has been instantiated, the specified action has to be executed, and this is handled by the IActionInvoker.  If you derived your controller from the Controller class, then this is the responsibility of an action invoker. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 29. The Action Execution © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 30. Built-In Action Invoker  Finds a method that has the same name as the requested action. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 31. Custom Action Name  You can then accept an action name that wouldn’t be legal as a C# method name.  [ActionName("User-Registration")]  [ActionNameSelector] © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 32. Action Method Selection  The action invoker uses an action method selector to remove ambiguity when selecting an action.  The invoker gives preference to the actions that have selectors. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 33. Custom Action Method Selector  You return true from IsValidForRequest if the method is able to process a request, and false otherwise. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 34. Custom Method Selector © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 35. Handling Unknown Actions © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 36. Action Summary  IActionInvoker  Action Name Selector  Action Method Selector  Handling Unknown Actions © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 37. Model Extensibility © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 38. What Is a Model? Model Binding Model Deserialization HTML View Controller HTTP Template © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 39. HTTP to .NET Classes public ActionResult Index(Reservation reservation) { // TODO BL. return View( reservation ); } Deserialization © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 40. HTTP to .NET Args © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 41. Model Binders  Binders are like type converters, because they can convert HTTP requests into objects that are passed to an action method. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 42. DefaultModelBinder Class  Translate HTTP request into complex models, including nested types and arrays.  URL  Form data, Culture - Sensitive 1. Request.Form 2. RoutedData.Values (Key,Value) 3. Request.QueryString 4. Request.Files © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 43. Model Binder Types  ByteArrayModelBinder  LinqBinaryModelBinder  FormCollectionModelBinder  HttpPostedFileBaseModelBinder  DefaultModelBinder © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 44. Binding to Complex Types [DisplayName("Book")] Model public class E4DBook { [Display(Name = "Title")] public string E4DTitle { get; set; } public Reservation MyReservation { get; set; } } @Html.LabelFor(model => model.MyReservation.FlightNum) View @Html.EditorFor(model => model.MyReservation.FlightNum) Html <label for="MyReservation_FlightNum">FlightNum</label> <input type="text" value="" id = "MyReservation_FlightNum" name = "MyReservation.FlightNum" /> © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 45. Specifying Custom Prefixes Controller public ActionResult Index( Reservation res1 , [Bind(Prefix="myRes")] Reservation res2 ) { ... } <!– First Arg --> Html <label for="FlightNum">FlightNum</label> <input type="text" id="FlightNum" name="FlightNum" /> ... <!– Second Arg --> <label for="MyRes_FlightNum">FlightNum</label> <input type="text" id="MyRes_FlightNum" name="MyRes.FlightNum" /> © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 46. Bind Attribute (“View”)  Represents an attribute that is used to provide details about how model binding to a parameter should occur. [Bind(Include = "FlightNum, TravelDate)] public class Reservation { public int FlightNum { get; set; } public DateTime TravelDate { get; set; } public int TicketCount { get; set; } public int DiscountPercent { get; set; } } © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 47. Bind Attribute © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 48. Binding to a String Collections Controller public ActionResult Index( List< string > reservation ) { ... } Html <input type="text" name="reservation" /> <input type="text" name="reservation" /> <input type="text" name="reservation" /> <input type="text" name="reservation" /> © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 49. Binding to a Collections Controller public ActionResult Index( List<Reservation> reservation ) { ... } <!– Option I--> Html <input type="text" name="[0].Name" /> <input type="text" name="[1].Name" /> <!– Option II --> <input type="hidden" name="Index" value="f1" /> <input type="text" name="[f1].Name" /> <input type="hidden" name="Index" value="f2" /> <input type="text" name="[f2].Name" /> © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 50. Binding to a Dictionary Controller public ActionResult Index( Dictionary<Reservation> reservation ) { ... } Html <input type="hidden" name="[0].key" value="f1" /> <input type="text" name="[0].value.Name" /> <input type="hidden" name="[1].key" value="f2" /> <input type="text" name="[1].value.Name" /> © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 51. Custom Model Binders  ASP.NET MVC allows us to override both the default model binder, as well as add custom model binders. ModelBinders.Binders.DefaultBinder = new CustomDefaultBinder(); ModelBinders.Binders.Add( typeof(DateTime), new DateTimeModelBinder() ); © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 52. ModelBinder Attribute  Represents an attribute that is used to associate a model type to a model-builder type. public ActionResult Contact( [ModelBinder(typeof(ContactBinder))] Contact contact ) { ViewData["name"] = contact.Name; ViewData["email"] = contact.Email; ViewData["message"] = contact.Message; ViewData["title"] = "Succes!"; return View(); } © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 53. Custom Binder © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 54. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 55. Model Summary  Http to .NET Classes  IModelBinder  IValueProvider  ModelMetadataProvider  BindAttribute  Validation  Data Annotations  IValidateObject © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 56. Action Results  A controller action returns something called an action result.  Action results types:  ViewResult  FileContentResult  EmptyResult  FilePathResult  RedirectResult  FileStreamResult  JsonResult  HttpNotFoundResult  JavaScriptResult  HttpRedirectResult  ContentResult  HttpStatusCodeResult © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 57. Custom Action Result © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 58. ASP.NET MVC Filters  Filters are custom classes that provide both a declarative and programmatic means to add pre-action and post-action behavior to controller action methods. [HandleError] [Authorize] public class CourseController : Controller { [OutputCache] [RequireHttps] public ActionResult Net( string name ) { ViewBag.Course = BL.GetCourse(name); return View(); } } © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 59. Filter Interfaces Action Method Action Result © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 60. Filter Order  Filters run in the following order:  Authorization filters  Action filters  Response filters  Exception filters © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 61. Controller & Filters  The Controller class implements each of the filter interfaces.  You can implement any of the filters for a specific controller by overriding the controller's On<Filter> method.  OnAuthorization  OnActionExecuting  OnActionExecuted  OnResultExecuting  OnResultExecuted  OnException © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 62. IAuthorizationFilter  Make security decisions about whether to execute an action method.  AuthorizeAttribute  RequireHttpsAttribute © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 63. IActionFilter Interface  OnActionExecuting  Runs before the action method.  OnActionExecuted  Runs after the action method © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 64. IResultFilter Interface  OnResultExecuting  Runs before the ActionResult object is executed.  OnResultExecuted  Runs after the result.  Can perform additional processing of the result.  The OutputCacheAttribute is one example of a result filter. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 65. IExceptionFilter  Execute if there is an unhandled exception thrown during the execution of the ASP.NET MVC pipeline.  Can be used for logging or displaying an error page.  HandleErrorAttribute is one example of an exception filter. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 66. Handle Error Attribute  You can specify an exception and the names of a view and layout.  Works only when custom errors are enabled in the Web.config file  <customErrors mode="On" /> inside the <system.web>  The view get HandleErrorInfo © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 67. First Global Controller Action Last Filter I Filter I Filter I Filter I Filter I Filter II Filter II Filter II Filter II Filter II Action Method Action Result Authorization Action Result Exception Filter I Filter I Filter I Filter I Filter I Filter II Filter I Filter II Filter I Filter II Filter I Filter I Filter I Filter I Filter I Filter II Filter I Filter II Filter I Filter I Filter I Filter I Filter II Filter II Filter I Filter I Filter I Filter I Filter II Filter I Filter I Filter II Filter I Filter II Filter I Filter I Filter I Filter I Filter I Filter I © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 68. Action Before After Filter I Filter II Filter I Filter II Filter I Filter II Filter I Filter II Filter I Filter II Filter II Filter I Filter II Filter I Filter II Filter I Filter II Filter I Filter II Filter I © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 69. Controller Context 1 6 2 3 4 5 © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 70. Filters © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 71. Custom Filter  You can create a filter in the following ways:  Override one or more of the controller's On<Filter> methods.  Create an attribute class that derives from ActionFilterAttribute or FilterAttribute.  Register a filter with the filter provider (the FilterProviders class).  Register a global filter using the GlobalFilterCollection class. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 72. Custom Filter © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 73. The Filter Provider Interface © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 74. Filter Providers  By default, ASP.NET MVC registers the following filter providers:  Filters for global filters.  FilterAttributeFilterProvider for filter attributes.  ControllerInstanceFilterProvider for controller instances.  The GetFilters method returns all of the IFilterProvider instances in the service locator. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 75. Filter Summary  Custom Filters  IAuthorizationFilter  IActionFilter  IResultFilter  IExceptionFilter  IFilterProvider © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 76. View Extensibility © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 77. Creating a Custom View Engine © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 78. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 79. © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 80. View Summary  IViewEngine  How to find the view?  IView  Render © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
  • 81. MVC Internals & Extensibility Summary Mvc Routing RouteHandler MvcHandler Dependency Controller Dependency Controller Resolver Resolver Controller Factory Activator Action Name Method Authorization Model Invoker Selector Selectror Filter Bind Action Action Action Result View Filer Method Filer Filter Engine Result Exception View Filter Filter © 2010 E4D LTD. All rights reserved. Tel: 054-5-767-300, Email: [email protected]