SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
Microsoft ASP.NET
                 MVC 1+2
                         Stig Irming-Pedersen




24-03-2010           1              Copenhagen Software
Copenhagen Software

                                     Software-
                                     udvikling




             Software as a Service                  Cloud Computing
                    (SaaS)




                                     Forretnings-
                                     udvikling




Software as a Service konsulenter
24-03-2010                            2                      Copenhagen Software
Copenhagen Software


             •      Har benyttet ASP.NET MVC siden Q1 2008

             •      Har leveret løsninger på ASP.NET MVC lige siden




                 Klimakonsortiets EnergyMap       Health Group A/S‟ sundhedsportaler
                 www.energymap.dk                 www.wemove.dk




Erfaringer med MVC
24-03-2010                                    3                                 Copenhagen Software
ASP.NET MVC



                1. Introduktion af ASP.NET MVC

                2. Grundlæggende funktionalitet

                3. Nyt i ASP.NET MVC 2.0

                4. Avanceret funktionalitet

                5. Deployment




Hvad kommer der til at ske?
24-03-2010                    4                   Copenhagen Software
Introduktion af ASP.NET MVC


      Gratis supplement til Microsofts eksisterende ASP.NET
      Alternativ til WebForms
      Understøttet i .NET Framework 3.5 SP1 (og i .NET 4)
      Integreret i Visual Studio 2008 SP1 (og i VS 2010)
      Version 1.0 er frigivet 18. marts 2009 under Ms-PL
      Version 2.0 er frigivet 12. marts 2010 under Ms-PL




Hvad er ASP.NET MVC?
24-03-2010                        5                   Copenhagen Software
ASP.NET
                                                                                      ASP.NET
   Kontrolbibliotek
                      ASP.NET MVC
                            AJAX               HTML               URL håndtering      • Solidt
                                                                                      • Skalerbart
                                                                                      • Omfattende

       Caching        Sessionshåndtering      Sikkerhed           Kontrolarkitektur




    Databaseadgang    Rettighedsstyring    HTTP abstraktion         Konfiguration




Hvad er ASP.NET MVC?
24-03-2010                                                    6                             Copenhagen Software
Introduktion af ASP.NET MVC

                Model-view-controller
                Kontrol med URL‟er (SEO)
                Kontrol over HTML
                Konventionsbaseret
                Aspect-oriented programming
                Unit Testing
                Frihed
                  ◦ Udvidbart
                  ◦ View engine
                  ◦ Test framework
                  ◦ og meget mere...



Hvorfor ASP.NET MVC?
24-03-2010                    7                Copenhagen Software
Introduktion af ASP.NET MVC
                                                      Model:
                                                      Objekter som
 View:                                                repræsenterer de data
 Markup som fortolkes                                 applikationen arbejder
 og vises af klienten                                 med.



                        View                 Model

                               Applikation




                               Controller
                                                     Controller:
                                                     Håndterer input fra view
                                                     og interagerer med
                                                     modellen.



Model-view-controller
24-03-2010                            8                        Copenhagen Software
Grundlæggende funktionalitet


              1. Konventioner
              2. Controllers og actions
              3. Views
              4. Navigering
              5. Data input
              6. Model binding
              7. Unit testing
              8. Validering
              9. ASP.NET MVC pipeline



Udvikling af CRUD applikation
24-03-2010                      9         Copenhagen Software
Konventioner
             www.domæne.dk/Product/Edit/123




             public class ProductController : Controller
             {
                 public ViewResult Edit(int id)
                 {
                   //Do something clever
                 }
               }




                 ~/view/Product/Edit.aspx



Controllers og actions
24-03-2010                        10                       Copenhagen Software
Views

   Views er klassiske .aspx-filer uden code-behind
   De renderes med WebForms view enginen
   Views nedarver fra System.Web.Mvc.ViewPage
   ViewPage kan være parameteriseret i Model typen:
      ◦ ViewPage<TModel>


     Et view indholder følgende essentielle properties:
      ◦   Model: det faktiske model objekt medsendt fra action‟en
      ◦   ViewData: anden data sendt med til view‟et
      ◦   ViewContext: information om konteksten
      ◦   TempData: data fra sidste round-trip




Filer og typer
24-03-2010                                   11                     Copenhagen Software
Views

     HTML Helpers er metoder til generering af HTML
     Extension methods knyttet til System.Web.Mvc.HtmlHelper
     Tilgås via Html-property‟en på ViewPage
     Erklæret i bl.a. System.Web.Mvc.Html.InputExtensions
     Type-stærke hjælpemetoder er tilføjet i MVC 2.0

      public static MvcHtmlString TextBox(this HtmlHelper htmlHelper,
                                          string name,
                                          object value);

      public static MvcHtmlString TextBoxFor<TModel, TProperty>(
                                          this HtmlHelper<TModel> htmlHelper,
                                          Expression<Func<TModel, TProperty>> expression);

      <%= Html.TextBox("Title", Model.Title) %>
      <%= Html.TextBoxFor(model => model.Title) %>




HTML Helpers
24-03-2010                                          12                            Copenhagen Software
Opsummering

                      •URL‟er afbildes til actions i controllers
                      •Afbildning konfigureres, så URL‟er og filstruktur
              URL      er uafhængige



                      •En action er en public metode på en Controller
                      •En action tager imod input, udfører
             Action    forretningslogik og vælger et view



                      •WebForms bruges som view engine (.aspx)
                      •View‟et renderer HTML til klienten
             View


MVC Pipeline
24-03-2010                               13                           Copenhagen Software
Navigering

   URL‟er og controller actions bindes sammen via routes
   En route tabel dannes når applikationen startes
   En route består af
       ◦ URL-skabelon
       ◦ Angivelse af controller og action
       ◦ Eventuelt constraints på URL (regulære udtryk)



                                                          public ActionResult SomeAction()


             URL
                                                          {
                                                           //Do something clever
                                                          }




  Url.Action(”Action", ”Controller")
                                                           URL
  Html.ActionLink(“Link text",                             <a href=”...”>
                  “Action",                                 Link text
                  “Controller")
                                                           </a>


Routing og links
24-03-2010                                  14                              Copenhagen Software
Data input

     At indsamle input fra brugeren gøres i flere trin:




                                                                                                                      Returner HTML for Details(id)
                                              POST Create(...data...)




                                                                         Redirect til Details(id)
                            Returner <form>




                                                                                                    GET Details(id)
             GET Create()




GET / POST/ Redirect / GET
24-03-2010                                                              15                                                                      Copenhagen Software
Data input

     Hvis data ikke accepteres af serveren, ser det lidt anderledes ud:




                                                                                    Returner præ-udfyldt <form>
                                                          POST Create(...data...)
                                   Returner <form>
                    GET Create()




GET / POST
24-03-2010                                           16                                                           Copenhagen Software
Model binding

   Model binding konverterer request data til Model objekter
   Request data leveres gennem ValueProvider i nævnte rækkefølge:
        ◦ Form data fra POST
        ◦ URL routing parametre
        ◦ Query string parametre


                          <label for="Title">Title:</label>
                          <%= Html.TextBox("Title", Model.Title)%>




                                           eller

      public ActionResult Create(string Title)        public ActionResult Create(Note note)
      {                                               {
                //Validate and create                           //Validate and create
      }                                               }



Fra data input til model
24-03-2010                                       17                            Copenhagen Software
Input fra brugeren

     Navnekonvention for at hente data i ValueProvider:
      ◦ nameOfActionParameter.NameOfModelProperty.NameOfModelSubProperty
      ◦ collectionParameter[n].NameOfModelProperty

     Model egenskaber kan kontrolleres med BindAttribute:
      ◦ Prefix (nameOfActionParameter)
      ◦ Include (NameOfModelProperty)
      ◦ Exclude (NameOfModelProperty)

     Model binding kan kontrolleres yderligere ved direkte kald:
      ◦ UpdateModel(model, prefix, inclProperties, exclProperties, valueProvider)
      ◦ TryUpdateModel(model, prefix, inclProperties, exclProperties, valueProvider)


     Model binding kan udskiftes ved implementation af IModelBinder:
      ◦ ModelBinders.Binders.DefaultBinder = new MyModelBinder();
      ◦ ModelBinders.Binders.Add(typeof(MyModel), new MyModelBinder());



Model binding
24-03-2010                                  18                            Copenhagen Software
Unit testing

   Adskillelse af markup og logik gør det muligt at teste logikken
    isoleret
   Actions er ikke afhængige af statiske klasser (i modsætning til
    ASP.NET Classic)
   Model binding gør, at action metoder nemt kan fodres med
    testdata
   Vi kan teste indholdet i et ActionResult uden at skulle behandle
    HTML
               ///Arrange
               var note = new Note(...);
               var controller = new NoteController();

               ///Act
               var result = controller.Edit(note) as ViewResult;

               ///Assert
               Assert.AreEqual<string>("Edit", result.ViewName);


Test af controller actions
24-03-2010                             19                          Copenhagen Software
Validering

     I ASP.NET Classic er validering blandet sammen med markup:
         <asp:RegularExpressionValidator
                   ID="REV“ ControlToValidate="SomeControl"
                   ErrorMessage="Error!” ValidationExpression="d{10}"
                   runat="server" />

     I ASP.NET MVC foretages validering i controlleren (eller endnu
      bedre, i modellen!) og fejl registreres i Controller.ModelState:
             private void ValidateNote(Note note) {
                 if (String.IsNullOrEmpty(note.Title)){
                     ModelState.AddModelError("Title", "Title required");
                 }
             }



       <%= Html.ValidationSummary("Please correct the errors and try again.") %>
       <%= Html.ValidationMessage("Title", "*")%>


Server side validering
24-03-2010                                     20                           Copenhagen Software
Input fra brugeren

     Validering er væsentligt forbedret i MVC 2.0

     Support af System.ComponentModel.DataAnnotations
      (ASP.NET Dynamic Data, Silverlight and Silverlight RIA):
      ◦   RequiredAttribute
      ◦   StringLengthAttribute
      ◦   RangeAttribute
      ◦   RegularExpression
      ◦   DataType
      ◦   ….

     Validering kan udskiftes ved implementation af:
      ◦   ModelValidatorProvider / AssociatedModelValidatorProvider
      ◦   ModelValidator
      ◦   ModelValidationResult
      ◦   ModelClientValidationRule



Server side validering
24-03-2010                                   21                       Copenhagen Software
MVC Pipeline

   Vi har nu en CRUD applikation
   Behandling af indkommende requests ser således ud




                                                                 ActionResult
        Routing vælger        Model      Model        Action     eksekveres
      controller og action   binding   validering   eksekveres       (view
                                                                  renderes)




Behandling af request
24-03-2010                                22                       Copenhagen Software
Nyt i ASP.NET MVC 2.0



              1. Client side validering
              2. Child actions
              3. Templated helpers
              4. Areas
              5. Async controllers
              6. HTTP verbs override




Ny funktionalitet
24-03-2010                   23           Copenhagen Software
Client side validering

   MVC 1.0 krævede en del fodarbejde eller brug af f.eks. xVal
   MVC 2.0 har indbygget support for DataAnnotations attributter


     Der genereres JSON validerings metadata til brug i browseren
     Følgende JavaScript valideringer supporteres:
      ◦ Microsoft AJAX
      ◦ jQuery validation


     Følgende indsættes i view (før Html.BeginForm):
      <% Html.EnableClientValidation(); %>




JavaScript validering
24-03-2010                         24                     Copenhagen Software
Child actions

     I MVC 1.0 kan markup genbruges med Partielle Views
      ◦   Nedarver fra ViewUserControls (.ascx)
      ◦   Svarer til UserControls i ASP.NET Classic
      ◦   En ViewUserControl har en Model property på samme måde en ViewPage
      ◦   En ViewUserControl har ingen forretningslogik

       <%@ Control Language="C#“ Inherits="System.Web.Mvc.ViewUserControl<SpiffyNotes.Models.Note>" %>
       <% using (Html.BeginForm()){%>
                   <label for="Title">Title:</label>
                   <%= Html.TextBox("Title", Model.Title)%>

                  <label for="Description">Description:</label>
                  <%= Html.TextArea("Description", Model.Description)%>
                  <input type="submit" value="Save" />
       <% } %>


     En ViewUserControl bruges med Html.RenderPartial():
                       <% Html.RenderPartial(”EditForm", Model); %>



Genbrug af markup
24-03-2010                                         25                                  Copenhagen Software
Child actions

     I MVC 2.0 er muligt at kalde action metoder fra views
      ◦ Komplekse objekter kan gives som argumenter


     Fra views kan action metoder kaldes med:
      ◦ Html.RenderAction (skriver direkte til Response)
      ◦ Html.Action (returnerer streng)


     Action metoder kan dekoreres med [ChildActionOnly] attribut:
      ◦ Kan ikke kaldes som almindelige action
      ◦ Håndterer caching anderledes




Genbrug af logik
24-03-2010                                  26                Copenhagen Software
Templated helpers

     Bruges til automatisk visning eller editering af objekter

     Svarer til funktionalitet i Dynamic Data

     Helper metoder er erklæret i
      System.Web.Mvc.Html.DisplayExtensions og –EditorExtensions:
      ◦   Html.Display(“Title”)
      ◦   Html.DisplayFor(model => model.Title)
      ◦   Html.DisplayForModel()
      ◦   Html.Editor(“Title”)
      ◦   Html.EditorFor(model => model.Title)
      ◦   Html.EditorForModel()




Auto scaffolding
24-03-2010                                 27                 Copenhagen Software
Templated helpers

     Default templates kan overrides ved at nedarve fra
      ViewUserControl
     Pr. konvention kaldes egne templates “<type>.ascx” og
      anbringes i folderne „DisplayTemplates‟ og „EditorTemplates‟
     Folderne bestemmer prioriteten af templates og kan anbringes:
      ◦ I Shared-folderen under Views
      ◦ I view-folderen for en given controller
      ◦ Tilsvarende for areas


   Meta data kan tilgås via ViewData.ModelMetadata property‟en
   Meta data indeholder bl.a:
      ◦ Model og ModelType
      ◦ ContainerType og PropertyName
      ◦ Properties med yderligere meta data



Overriding templates
24-03-2010                                   28           Copenhagen Software
Templated helpers

   Meta data fås fra modellen via MetadataModelProvider
   Den samme meta data anvendes ved Model binding
   MVC 2.0 understøtter System.ComponentModel og
    System.ComponentModel.DataAnnotations
   Følgende attributter kan anvendes:
      ◦   [HiddenInput]
      ◦   [UIHint]
      ◦   [DataType]
      ◦   [ReadOnly]
      ◦   [DisplayFormat]
      ◦   [ScaffoldColumn]
      ◦   [DisplayName]




Model meta data
24-03-2010                       29                        Copenhagen Software
Areas

   Giver mulighed for inddeling af et projekt i områder
   Hvert area indeholder foldere til:
      ◦ Models
      ◦ Controllers
      ◦ Views


     Hvert area konfigureres via nedarvet AreaRegistration:
      ◦ AreaName: property for områdets navn
      ◦ RegisterArea: metode til registrering af områdespecifikke routes


     Alle areas registreres i Global.asax via hjælpemetode:
      ◦ AreaRegistration.RegisterAllAreas()

     I MVC 2.0 er „area‟ et reserveret ord i routing konfigurationer



Inddeling i områder
24-03-2010                                    30                           Copenhagen Software
Asynchronous controllers

   Mulighed for optimering af brug af web server threads
   Requests med længerevarende kald blokerer threads
   Med asynkrone controllers er det muligt at frigive threads ved
    venten og efterfølgende få en ny thread fra poolen

     Async controllers nedarver fra AsyncController frem for Controller

     Asynkrone controllers er først nyttige ved flere requests end
      threads og afhænger af eksterne services




Optimering af threads forbrug
24-03-2010                           31                     Copenhagen Software
HTTP verbs override

   REST benytter HTTP verbs som GET, PUT, POST og DELETE
   MVC 2.0 understøtter nye action method attributter:
      ◦   HttpPostAttribute
      ◦   HttpPutAttribute
      ◦   HttpGetAttribute
      ◦   HttpDeleteAttribute


   Browsere understøtter ikke alle verber
   Html.HttpMethodOverride(HttpVerbs) renderer hidden input
    element, som håndteres af de nye attributter




Håndtering af HTTP verbs
24-03-2010                      32                    Copenhagen Software
Andre nyheder

     Model validering erstatter input validering (alle egenskaber
      valideres uafhængig af tilstedeværelse i form POST)
     Binary data kan håndteres af Model binders
     Ny DefaultValueAttribute til action parameters
     Ny RequireHttpsAttribute action filter
     Html.ValidationSummary kan vise fejlbeskeder for model fejl
     JsonResult virker nu kun med HTTP POST requests
     HTML helpers returner MvcHtmlString objekt




ASP.NET MVC 2.0
24-03-2010                          33                     Copenhagen Software
Avanceret funktionalitet



               1. AJAX
               2. ActionResult
               3. Filters
               4. MVC Pipeline
               5. Udvidbarhed
               6. T4 templates




Oversigt
24-03-2010                   34   Copenhagen Software
AJAX

   Ajax Helpers betegner metoder til generering af AJAX kald
   AJAX‟ificerede pendanter til HTML Helpers
   Tilgås via Ajax-property‟en på ViewPage
   Defineret i System.Web.Mvc.Ajax.AjaxExtensions

      <div id="formElement" >
      <% using (Ajax.BeginForm(
                new AjaxOptions { UpdateTargetId = "formElement",
                                  OnFailure = "handleError" }))
          {%>
              <!-- Some <form> -->
        <%}%>
      </div>
      <script language="javascript" type="text/javascript“>
      function handleError(ajaxContext) {
                document.getElementById("formElement").innerHTML = ajaxContext.get_data();
      }
      </script>

Ajax Helpers
24-03-2010                                  35                            Copenhagen Software
AJAX

     jQuery er et JavaScript-bibliotek, der gør programmering i
      JavaScript sjovt – eller i hvert fald mindre håbløst:

     jQuery følger med Visual Studios MVC templates!
     jQuery kan bruges i stedet for Ajax Helpers
     Fordi ASP.NET MVC vil give dig fuld kontrol over din HTML,
      indeholder det ikke kontroller til kalendere, grids mv. I stedet
      benyttes typisk grids fra JavaScript frameworks:
      ◦   jQuery (og jQuery UI)
      ◦   Ext JS
      ◦   Teleriks kontroller
      ◦   Din egen favorit




jQuery
24-03-2010                           36                       Copenhagen Software
ActionResult

   En action skal returnere et ActionResult
   ActionResult‟ets type afgør, hvad der returneres til brugeren

                 public abstract class ActionResult
                 {
                   public abstract void ExecuteResult(ControllerContext context);
                 }


                                                      ActionResult




                   ContentResult    FileResult
                                                    HttpUnauthorized-
                                                                           JSONResult
  ViewResult                                             Result                               RedirectResult        Dit eget ActionResult
 Renderer view     Renderer ren                                         Objekt serialiseret   Redirect til URL
                                   Returnerer fil   HTTP Status code
                                                                           som JSON
                                                                                                                            ???
                      tekst                               401




ActionResult typer
24-03-2010                                                  37                                                   Copenhagen Software
Filters

   Med filters kan man elegant klistre ekstra logik på sine actions
   Implementeres som attributter, som forstås og evalueres af
    ASP.NET MVC frameworket
   Perfekt til deklarativ håndtering af cross-cutting concerns
      ◦   Authentication
      ◦   Logging
      ◦   Database connection management
      ◦   Fejlhåndtering
     Der er fire typer filtre, som evalueres på forskellige tidspunkter:
      ◦   IAuthorizationFilter
      ◦   IActionFilter
      ◦   IResultFilter
      ◦   IExceptionFilter

     Filtre evalueres i speciel rækkefølge og exceptions “bobler” op
      gennem dem


Action Filters
24-03-2010                                 38                 Copenhagen Software
Filters

     IActionFilter:
      Evalueres umiddelbart før og efter den tilhørende action metode
      køres
             public interface IActionFilter
             {
               void OnActionExecuted(ActionExecutedContext filterContext);
               void OnActionExecuting(ActionExecutingContext filterContext);
             }

     IResultFilter:
      Evalueres umiddelbart før og efter ActionResult‟et evalueres

             public interface IResultFilter
             {
               void OnResultExecuted(ResultExecutedContext filterContext);
               void OnResultExecuting(ResultExecutingContext filterContext);
             }




Action Filters
24-03-2010                                   39                           Copenhagen Software
MVC Pipeline

                             Routing
                                                Model            Model
              URL            vælger
                                               binding         validering
                              action



             Authorize                          Action
                         Action filtre                         Action filtre
               filtre                         eksekveres




                                ActionResult
             Result filtre                                 Result filtre
                                eksekveres




                     (               View
                                  eksekveres
                                                         )
Udvidet pipeline
24-03-2010                               40                                    Copenhagen Software
Udvidbarhed

     IRouteHandler: oversætter URL til IHttpHandler
      ◦   ASP.NET MVC benytter en MvcRouteHandler. Med din egen IRouteHandler kan du helt forbigå ASP.NET
          MVC.

     IModelBinder: binder request data til model og validerer
      ◦   Håndter binding anderledes (inject dependencies i model)
      ◦   Brug model meta data (indeholder valideringsinformation) anderledes

     IControllerFactory: instantierer controllers
      ◦   Dependency Injection
      ◦   Find controllers i andre assemblies: dynamisk? Fra database?

     IActionInvoker: eksekverer actions/results
      ◦   Håndter filtre anderledes
      ◦   Vælg anden view engine

     IViewEngine: vælger view baseret på ActionResult
      ◦   Led efter views på en ny måde
      ◦   Brug særlig markup (NHaml, Spark mv.)

     ModelMetaDataProvider / ModelValidatorProvider

     Det er kun begyndelsen…



Extension Points
24-03-2010                                             41                               Copenhagen Software
T4MVC

   T4 template for MVC
   Del af MVC Contrib på CodePlex
   Kan hentes her:
    http://mvccontrib.codeplex.com/wikipage?title=T4MVC

     Templaten genererer typer for strenge i et projekt

      <%= Html.ActionLink(”View note”, ”Details", ”Notes",
                          new { id = Model.Id }, null)%>

      <%= Html.ActionLink(”View note", MVC.Note.Details(Model.Id))%>


      return View(”Edit");
      return View(Views.Edit);



Statisk typede strenge
24-03-2010                                 42                          Copenhagen Software
Deployment

     ASP.NET MVC består af en række assemblies, som blot kan
      bin-deployes:
      ◦ System.Web.Routing.dll
      ◦ System.Web.Mvc.dll
      ◦ System.Web.Abstractions.dll


     ASP.NET MVC kan køre på både IIS 6.0 og IIS 7.0, men
      sidstnævnte er mest velegnet
      ◦ IIS 6.0 har udfordringer med extension-less routes
      ◦ IIS 7.0 kan med fordel benytte Integrated Pipeline


     Kan også benyttes på Mono

     MVC 1.0 og MVC 2.0 kan installeres side-by-side


Krav til miljø
24-03-2010                                 43                Copenhagen Software
ASP.NET MVC

    Officiel hjemmeside og CodePlex

             www.asp.net/mvc
             aspnet.codeplex.com
    MVCContrib
             http://mvccontrib.codeplex.com
    Blogs

               weblogs.asp.net/Scottgu
               www.haacked.com
               www.hanselman.com


Hvordan kommer jeg videre?
24-03-2010                           44       Copenhagen Software
Copenhagen Software
    Software as a Service konsulenter




                       www.copenhagensoftware.com

                       mail@copenhagensoftware.com




Spørgsmål?
24-03-2010                              45           Copenhagen Software

Contenu connexe

Similaire à Mvc 1+2 Tech Talk 201003

It arkitektur - forankring & værditilførsel
It arkitektur - forankring & værditilførselIt arkitektur - forankring & værditilførsel
It arkitektur - forankring & værditilførselLars Rosenberg Nielsen
 
Webtilgængelighed. Har du styr på det?
Webtilgængelighed. Har du styr på det?Webtilgængelighed. Har du styr på det?
Webtilgængelighed. Har du styr på det?Pentia
 
Forretning og IT SKAL hænge sammen
Forretning og IT SKAL hænge sammenForretning og IT SKAL hænge sammen
Forretning og IT SKAL hænge sammenIBM Danmark
 
Case Sharepoint Intranet Hos Pressalt Microsoft Seminar Januar 2009
Case Sharepoint Intranet Hos Pressalt   Microsoft Seminar Januar 2009Case Sharepoint Intranet Hos Pressalt   Microsoft Seminar Januar 2009
Case Sharepoint Intranet Hos Pressalt Microsoft Seminar Januar 2009guest7bdfc5
 
Cross Platform Apps (danish)
Cross Platform Apps (danish)Cross Platform Apps (danish)
Cross Platform Apps (danish)Mads Møller
 
CADCONNECT PML - Made for Dynamics NAV - Dansk
CADCONNECT  PML - Made for Dynamics NAV - DanskCADCONNECT  PML - Made for Dynamics NAV - Dansk
CADCONNECT PML - Made for Dynamics NAV - DanskNAVEKSA A/S
 
REST - Hyper Media klienter med Ramone
REST - Hyper Media klienter med RamoneREST - Hyper Media klienter med Ramone
REST - Hyper Media klienter med RamoneJornWildt
 
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsTag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsChristian Dalager
 
PureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, Atea
PureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, AteaPureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, Atea
PureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, AteaIBM Danmark
 
20050518 FVS præsentation
20050518 FVS præsentation20050518 FVS præsentation
20050518 FVS præsentationKim Holm
 
Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...
Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...
Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...Mediehuset Ingeniøren Live
 
automation++ - mapp intro
automation++ - mapp introautomation++ - mapp intro
automation++ - mapp introbrdk
 
Digicure seminar | Web performance optimering
Digicure seminar | Web performance optimeringDigicure seminar | Web performance optimering
Digicure seminar | Web performance optimeringTobias Borg Petersen
 
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursusToolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursusToolmaster.dk
 
Cloud rambøll mgmt - briefing d. 28. januar 2011
Cloud   rambøll mgmt - briefing d. 28. januar 2011Cloud   rambøll mgmt - briefing d. 28. januar 2011
Cloud rambøll mgmt - briefing d. 28. januar 2011Kim Jensen
 
Workareas and competences
Workareas and competencesWorkareas and competences
Workareas and competencesOle Ahrenfeldt
 

Similaire à Mvc 1+2 Tech Talk 201003 (20)

Angular2 workshop
Angular2 workshopAngular2 workshop
Angular2 workshop
 
It arkitektur - forankring & værditilførsel
It arkitektur - forankring & værditilførselIt arkitektur - forankring & værditilførsel
It arkitektur - forankring & værditilførsel
 
Automatiseret GUI-test af Lars Kjølholm, BRF Kredit
Automatiseret GUI-test af Lars Kjølholm, BRF KreditAutomatiseret GUI-test af Lars Kjølholm, BRF Kredit
Automatiseret GUI-test af Lars Kjølholm, BRF Kredit
 
Webtilgængelighed. Har du styr på det?
Webtilgængelighed. Har du styr på det?Webtilgængelighed. Har du styr på det?
Webtilgængelighed. Har du styr på det?
 
Forretning og IT SKAL hænge sammen
Forretning og IT SKAL hænge sammenForretning og IT SKAL hænge sammen
Forretning og IT SKAL hænge sammen
 
Lamp - Apache | appacademy.dk
Lamp - Apache | appacademy.dkLamp - Apache | appacademy.dk
Lamp - Apache | appacademy.dk
 
Case Sharepoint Intranet Hos Pressalt Microsoft Seminar Januar 2009
Case Sharepoint Intranet Hos Pressalt   Microsoft Seminar Januar 2009Case Sharepoint Intranet Hos Pressalt   Microsoft Seminar Januar 2009
Case Sharepoint Intranet Hos Pressalt Microsoft Seminar Januar 2009
 
Cross Platform Apps (danish)
Cross Platform Apps (danish)Cross Platform Apps (danish)
Cross Platform Apps (danish)
 
CADCONNECT PML - Made for Dynamics NAV - Dansk
CADCONNECT  PML - Made for Dynamics NAV - DanskCADCONNECT  PML - Made for Dynamics NAV - Dansk
CADCONNECT PML - Made for Dynamics NAV - Dansk
 
REST - Hyper Media klienter med Ramone
REST - Hyper Media klienter med RamoneREST - Hyper Media klienter med Ramone
REST - Hyper Media klienter med Ramone
 
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsTag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobs
 
PureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, Atea
PureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, AteaPureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, Atea
PureSystems: Expert-in-a-box IT-infrastruktur, Kim Gregers Petersen, Atea
 
20050518 FVS præsentation
20050518 FVS præsentation20050518 FVS præsentation
20050518 FVS præsentation
 
Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...
Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...
Nøglefærdigt datacenter i en fart med HDS - Komplex It, Lars JensenSteen Møll...
 
automation++ - mapp intro
automation++ - mapp introautomation++ - mapp intro
automation++ - mapp intro
 
SAPIT - CNUG talk 04/10-2011
SAPIT - CNUG talk 04/10-2011SAPIT - CNUG talk 04/10-2011
SAPIT - CNUG talk 04/10-2011
 
Digicure seminar | Web performance optimering
Digicure seminar | Web performance optimeringDigicure seminar | Web performance optimering
Digicure seminar | Web performance optimering
 
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursusToolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursus
 
Cloud rambøll mgmt - briefing d. 28. januar 2011
Cloud   rambøll mgmt - briefing d. 28. januar 2011Cloud   rambøll mgmt - briefing d. 28. januar 2011
Cloud rambøll mgmt - briefing d. 28. januar 2011
 
Workareas and competences
Workareas and competencesWorkareas and competences
Workareas and competences
 

Mvc 1+2 Tech Talk 201003

  • 1. Microsoft ASP.NET MVC 1+2 Stig Irming-Pedersen 24-03-2010 1 Copenhagen Software
  • 2. Copenhagen Software Software- udvikling Software as a Service Cloud Computing (SaaS) Forretnings- udvikling Software as a Service konsulenter 24-03-2010 2 Copenhagen Software
  • 3. Copenhagen Software • Har benyttet ASP.NET MVC siden Q1 2008 • Har leveret løsninger på ASP.NET MVC lige siden Klimakonsortiets EnergyMap Health Group A/S‟ sundhedsportaler www.energymap.dk www.wemove.dk Erfaringer med MVC 24-03-2010 3 Copenhagen Software
  • 4. ASP.NET MVC 1. Introduktion af ASP.NET MVC 2. Grundlæggende funktionalitet 3. Nyt i ASP.NET MVC 2.0 4. Avanceret funktionalitet 5. Deployment Hvad kommer der til at ske? 24-03-2010 4 Copenhagen Software
  • 5. Introduktion af ASP.NET MVC  Gratis supplement til Microsofts eksisterende ASP.NET  Alternativ til WebForms  Understøttet i .NET Framework 3.5 SP1 (og i .NET 4)  Integreret i Visual Studio 2008 SP1 (og i VS 2010)  Version 1.0 er frigivet 18. marts 2009 under Ms-PL  Version 2.0 er frigivet 12. marts 2010 under Ms-PL Hvad er ASP.NET MVC? 24-03-2010 5 Copenhagen Software
  • 6. ASP.NET ASP.NET Kontrolbibliotek ASP.NET MVC AJAX HTML URL håndtering • Solidt • Skalerbart • Omfattende Caching Sessionshåndtering Sikkerhed Kontrolarkitektur Databaseadgang Rettighedsstyring HTTP abstraktion Konfiguration Hvad er ASP.NET MVC? 24-03-2010 6 Copenhagen Software
  • 7. Introduktion af ASP.NET MVC  Model-view-controller  Kontrol med URL‟er (SEO)  Kontrol over HTML  Konventionsbaseret  Aspect-oriented programming  Unit Testing  Frihed ◦ Udvidbart ◦ View engine ◦ Test framework ◦ og meget mere... Hvorfor ASP.NET MVC? 24-03-2010 7 Copenhagen Software
  • 8. Introduktion af ASP.NET MVC Model: Objekter som View: repræsenterer de data Markup som fortolkes applikationen arbejder og vises af klienten med. View Model Applikation Controller Controller: Håndterer input fra view og interagerer med modellen. Model-view-controller 24-03-2010 8 Copenhagen Software
  • 9. Grundlæggende funktionalitet 1. Konventioner 2. Controllers og actions 3. Views 4. Navigering 5. Data input 6. Model binding 7. Unit testing 8. Validering 9. ASP.NET MVC pipeline Udvikling af CRUD applikation 24-03-2010 9 Copenhagen Software
  • 10. Konventioner www.domæne.dk/Product/Edit/123 public class ProductController : Controller { public ViewResult Edit(int id) { //Do something clever } } ~/view/Product/Edit.aspx Controllers og actions 24-03-2010 10 Copenhagen Software
  • 11. Views  Views er klassiske .aspx-filer uden code-behind  De renderes med WebForms view enginen  Views nedarver fra System.Web.Mvc.ViewPage  ViewPage kan være parameteriseret i Model typen: ◦ ViewPage<TModel>  Et view indholder følgende essentielle properties: ◦ Model: det faktiske model objekt medsendt fra action‟en ◦ ViewData: anden data sendt med til view‟et ◦ ViewContext: information om konteksten ◦ TempData: data fra sidste round-trip Filer og typer 24-03-2010 11 Copenhagen Software
  • 12. Views  HTML Helpers er metoder til generering af HTML  Extension methods knyttet til System.Web.Mvc.HtmlHelper  Tilgås via Html-property‟en på ViewPage  Erklæret i bl.a. System.Web.Mvc.Html.InputExtensions  Type-stærke hjælpemetoder er tilføjet i MVC 2.0 public static MvcHtmlString TextBox(this HtmlHelper htmlHelper, string name, object value); public static MvcHtmlString TextBoxFor<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression); <%= Html.TextBox("Title", Model.Title) %> <%= Html.TextBoxFor(model => model.Title) %> HTML Helpers 24-03-2010 12 Copenhagen Software
  • 13. Opsummering •URL‟er afbildes til actions i controllers •Afbildning konfigureres, så URL‟er og filstruktur URL er uafhængige •En action er en public metode på en Controller •En action tager imod input, udfører Action forretningslogik og vælger et view •WebForms bruges som view engine (.aspx) •View‟et renderer HTML til klienten View MVC Pipeline 24-03-2010 13 Copenhagen Software
  • 14. Navigering  URL‟er og controller actions bindes sammen via routes  En route tabel dannes når applikationen startes  En route består af ◦ URL-skabelon ◦ Angivelse af controller og action ◦ Eventuelt constraints på URL (regulære udtryk) public ActionResult SomeAction() URL { //Do something clever } Url.Action(”Action", ”Controller") URL Html.ActionLink(“Link text", <a href=”...”> “Action", Link text “Controller") </a> Routing og links 24-03-2010 14 Copenhagen Software
  • 15. Data input  At indsamle input fra brugeren gøres i flere trin: Returner HTML for Details(id) POST Create(...data...) Redirect til Details(id) Returner <form> GET Details(id) GET Create() GET / POST/ Redirect / GET 24-03-2010 15 Copenhagen Software
  • 16. Data input  Hvis data ikke accepteres af serveren, ser det lidt anderledes ud: Returner præ-udfyldt <form> POST Create(...data...) Returner <form> GET Create() GET / POST 24-03-2010 16 Copenhagen Software
  • 17. Model binding  Model binding konverterer request data til Model objekter  Request data leveres gennem ValueProvider i nævnte rækkefølge: ◦ Form data fra POST ◦ URL routing parametre ◦ Query string parametre <label for="Title">Title:</label> <%= Html.TextBox("Title", Model.Title)%> eller public ActionResult Create(string Title) public ActionResult Create(Note note) { { //Validate and create //Validate and create } } Fra data input til model 24-03-2010 17 Copenhagen Software
  • 18. Input fra brugeren  Navnekonvention for at hente data i ValueProvider: ◦ nameOfActionParameter.NameOfModelProperty.NameOfModelSubProperty ◦ collectionParameter[n].NameOfModelProperty  Model egenskaber kan kontrolleres med BindAttribute: ◦ Prefix (nameOfActionParameter) ◦ Include (NameOfModelProperty) ◦ Exclude (NameOfModelProperty)  Model binding kan kontrolleres yderligere ved direkte kald: ◦ UpdateModel(model, prefix, inclProperties, exclProperties, valueProvider) ◦ TryUpdateModel(model, prefix, inclProperties, exclProperties, valueProvider)  Model binding kan udskiftes ved implementation af IModelBinder: ◦ ModelBinders.Binders.DefaultBinder = new MyModelBinder(); ◦ ModelBinders.Binders.Add(typeof(MyModel), new MyModelBinder()); Model binding 24-03-2010 18 Copenhagen Software
  • 19. Unit testing  Adskillelse af markup og logik gør det muligt at teste logikken isoleret  Actions er ikke afhængige af statiske klasser (i modsætning til ASP.NET Classic)  Model binding gør, at action metoder nemt kan fodres med testdata  Vi kan teste indholdet i et ActionResult uden at skulle behandle HTML ///Arrange var note = new Note(...); var controller = new NoteController(); ///Act var result = controller.Edit(note) as ViewResult; ///Assert Assert.AreEqual<string>("Edit", result.ViewName); Test af controller actions 24-03-2010 19 Copenhagen Software
  • 20. Validering  I ASP.NET Classic er validering blandet sammen med markup: <asp:RegularExpressionValidator ID="REV“ ControlToValidate="SomeControl" ErrorMessage="Error!” ValidationExpression="d{10}" runat="server" />  I ASP.NET MVC foretages validering i controlleren (eller endnu bedre, i modellen!) og fejl registreres i Controller.ModelState: private void ValidateNote(Note note) { if (String.IsNullOrEmpty(note.Title)){ ModelState.AddModelError("Title", "Title required"); } } <%= Html.ValidationSummary("Please correct the errors and try again.") %> <%= Html.ValidationMessage("Title", "*")%> Server side validering 24-03-2010 20 Copenhagen Software
  • 21. Input fra brugeren  Validering er væsentligt forbedret i MVC 2.0  Support af System.ComponentModel.DataAnnotations (ASP.NET Dynamic Data, Silverlight and Silverlight RIA): ◦ RequiredAttribute ◦ StringLengthAttribute ◦ RangeAttribute ◦ RegularExpression ◦ DataType ◦ ….  Validering kan udskiftes ved implementation af: ◦ ModelValidatorProvider / AssociatedModelValidatorProvider ◦ ModelValidator ◦ ModelValidationResult ◦ ModelClientValidationRule Server side validering 24-03-2010 21 Copenhagen Software
  • 22. MVC Pipeline  Vi har nu en CRUD applikation  Behandling af indkommende requests ser således ud ActionResult Routing vælger Model Model Action eksekveres controller og action binding validering eksekveres (view renderes) Behandling af request 24-03-2010 22 Copenhagen Software
  • 23. Nyt i ASP.NET MVC 2.0 1. Client side validering 2. Child actions 3. Templated helpers 4. Areas 5. Async controllers 6. HTTP verbs override Ny funktionalitet 24-03-2010 23 Copenhagen Software
  • 24. Client side validering  MVC 1.0 krævede en del fodarbejde eller brug af f.eks. xVal  MVC 2.0 har indbygget support for DataAnnotations attributter  Der genereres JSON validerings metadata til brug i browseren  Følgende JavaScript valideringer supporteres: ◦ Microsoft AJAX ◦ jQuery validation  Følgende indsættes i view (før Html.BeginForm): <% Html.EnableClientValidation(); %> JavaScript validering 24-03-2010 24 Copenhagen Software
  • 25. Child actions  I MVC 1.0 kan markup genbruges med Partielle Views ◦ Nedarver fra ViewUserControls (.ascx) ◦ Svarer til UserControls i ASP.NET Classic ◦ En ViewUserControl har en Model property på samme måde en ViewPage ◦ En ViewUserControl har ingen forretningslogik <%@ Control Language="C#“ Inherits="System.Web.Mvc.ViewUserControl<SpiffyNotes.Models.Note>" %> <% using (Html.BeginForm()){%> <label for="Title">Title:</label> <%= Html.TextBox("Title", Model.Title)%> <label for="Description">Description:</label> <%= Html.TextArea("Description", Model.Description)%> <input type="submit" value="Save" /> <% } %>  En ViewUserControl bruges med Html.RenderPartial(): <% Html.RenderPartial(”EditForm", Model); %> Genbrug af markup 24-03-2010 25 Copenhagen Software
  • 26. Child actions  I MVC 2.0 er muligt at kalde action metoder fra views ◦ Komplekse objekter kan gives som argumenter  Fra views kan action metoder kaldes med: ◦ Html.RenderAction (skriver direkte til Response) ◦ Html.Action (returnerer streng)  Action metoder kan dekoreres med [ChildActionOnly] attribut: ◦ Kan ikke kaldes som almindelige action ◦ Håndterer caching anderledes Genbrug af logik 24-03-2010 26 Copenhagen Software
  • 27. Templated helpers  Bruges til automatisk visning eller editering af objekter  Svarer til funktionalitet i Dynamic Data  Helper metoder er erklæret i System.Web.Mvc.Html.DisplayExtensions og –EditorExtensions: ◦ Html.Display(“Title”) ◦ Html.DisplayFor(model => model.Title) ◦ Html.DisplayForModel() ◦ Html.Editor(“Title”) ◦ Html.EditorFor(model => model.Title) ◦ Html.EditorForModel() Auto scaffolding 24-03-2010 27 Copenhagen Software
  • 28. Templated helpers  Default templates kan overrides ved at nedarve fra ViewUserControl  Pr. konvention kaldes egne templates “<type>.ascx” og anbringes i folderne „DisplayTemplates‟ og „EditorTemplates‟  Folderne bestemmer prioriteten af templates og kan anbringes: ◦ I Shared-folderen under Views ◦ I view-folderen for en given controller ◦ Tilsvarende for areas  Meta data kan tilgås via ViewData.ModelMetadata property‟en  Meta data indeholder bl.a: ◦ Model og ModelType ◦ ContainerType og PropertyName ◦ Properties med yderligere meta data Overriding templates 24-03-2010 28 Copenhagen Software
  • 29. Templated helpers  Meta data fås fra modellen via MetadataModelProvider  Den samme meta data anvendes ved Model binding  MVC 2.0 understøtter System.ComponentModel og System.ComponentModel.DataAnnotations  Følgende attributter kan anvendes: ◦ [HiddenInput] ◦ [UIHint] ◦ [DataType] ◦ [ReadOnly] ◦ [DisplayFormat] ◦ [ScaffoldColumn] ◦ [DisplayName] Model meta data 24-03-2010 29 Copenhagen Software
  • 30. Areas  Giver mulighed for inddeling af et projekt i områder  Hvert area indeholder foldere til: ◦ Models ◦ Controllers ◦ Views  Hvert area konfigureres via nedarvet AreaRegistration: ◦ AreaName: property for områdets navn ◦ RegisterArea: metode til registrering af områdespecifikke routes  Alle areas registreres i Global.asax via hjælpemetode: ◦ AreaRegistration.RegisterAllAreas()  I MVC 2.0 er „area‟ et reserveret ord i routing konfigurationer Inddeling i områder 24-03-2010 30 Copenhagen Software
  • 31. Asynchronous controllers  Mulighed for optimering af brug af web server threads  Requests med længerevarende kald blokerer threads  Med asynkrone controllers er det muligt at frigive threads ved venten og efterfølgende få en ny thread fra poolen  Async controllers nedarver fra AsyncController frem for Controller  Asynkrone controllers er først nyttige ved flere requests end threads og afhænger af eksterne services Optimering af threads forbrug 24-03-2010 31 Copenhagen Software
  • 32. HTTP verbs override  REST benytter HTTP verbs som GET, PUT, POST og DELETE  MVC 2.0 understøtter nye action method attributter: ◦ HttpPostAttribute ◦ HttpPutAttribute ◦ HttpGetAttribute ◦ HttpDeleteAttribute  Browsere understøtter ikke alle verber  Html.HttpMethodOverride(HttpVerbs) renderer hidden input element, som håndteres af de nye attributter Håndtering af HTTP verbs 24-03-2010 32 Copenhagen Software
  • 33. Andre nyheder  Model validering erstatter input validering (alle egenskaber valideres uafhængig af tilstedeværelse i form POST)  Binary data kan håndteres af Model binders  Ny DefaultValueAttribute til action parameters  Ny RequireHttpsAttribute action filter  Html.ValidationSummary kan vise fejlbeskeder for model fejl  JsonResult virker nu kun med HTTP POST requests  HTML helpers returner MvcHtmlString objekt ASP.NET MVC 2.0 24-03-2010 33 Copenhagen Software
  • 34. Avanceret funktionalitet 1. AJAX 2. ActionResult 3. Filters 4. MVC Pipeline 5. Udvidbarhed 6. T4 templates Oversigt 24-03-2010 34 Copenhagen Software
  • 35. AJAX  Ajax Helpers betegner metoder til generering af AJAX kald  AJAX‟ificerede pendanter til HTML Helpers  Tilgås via Ajax-property‟en på ViewPage  Defineret i System.Web.Mvc.Ajax.AjaxExtensions <div id="formElement" > <% using (Ajax.BeginForm( new AjaxOptions { UpdateTargetId = "formElement", OnFailure = "handleError" })) {%> <!-- Some <form> --> <%}%> </div> <script language="javascript" type="text/javascript“> function handleError(ajaxContext) { document.getElementById("formElement").innerHTML = ajaxContext.get_data(); } </script> Ajax Helpers 24-03-2010 35 Copenhagen Software
  • 36. AJAX  jQuery er et JavaScript-bibliotek, der gør programmering i JavaScript sjovt – eller i hvert fald mindre håbløst:  jQuery følger med Visual Studios MVC templates!  jQuery kan bruges i stedet for Ajax Helpers  Fordi ASP.NET MVC vil give dig fuld kontrol over din HTML, indeholder det ikke kontroller til kalendere, grids mv. I stedet benyttes typisk grids fra JavaScript frameworks: ◦ jQuery (og jQuery UI) ◦ Ext JS ◦ Teleriks kontroller ◦ Din egen favorit jQuery 24-03-2010 36 Copenhagen Software
  • 37. ActionResult  En action skal returnere et ActionResult  ActionResult‟ets type afgør, hvad der returneres til brugeren public abstract class ActionResult { public abstract void ExecuteResult(ControllerContext context); } ActionResult ContentResult FileResult HttpUnauthorized- JSONResult ViewResult Result RedirectResult Dit eget ActionResult Renderer view Renderer ren Objekt serialiseret Redirect til URL Returnerer fil HTTP Status code som JSON ??? tekst 401 ActionResult typer 24-03-2010 37 Copenhagen Software
  • 38. Filters  Med filters kan man elegant klistre ekstra logik på sine actions  Implementeres som attributter, som forstås og evalueres af ASP.NET MVC frameworket  Perfekt til deklarativ håndtering af cross-cutting concerns ◦ Authentication ◦ Logging ◦ Database connection management ◦ Fejlhåndtering  Der er fire typer filtre, som evalueres på forskellige tidspunkter: ◦ IAuthorizationFilter ◦ IActionFilter ◦ IResultFilter ◦ IExceptionFilter  Filtre evalueres i speciel rækkefølge og exceptions “bobler” op gennem dem Action Filters 24-03-2010 38 Copenhagen Software
  • 39. Filters  IActionFilter: Evalueres umiddelbart før og efter den tilhørende action metode køres public interface IActionFilter { void OnActionExecuted(ActionExecutedContext filterContext); void OnActionExecuting(ActionExecutingContext filterContext); }  IResultFilter: Evalueres umiddelbart før og efter ActionResult‟et evalueres public interface IResultFilter { void OnResultExecuted(ResultExecutedContext filterContext); void OnResultExecuting(ResultExecutingContext filterContext); } Action Filters 24-03-2010 39 Copenhagen Software
  • 40. MVC Pipeline Routing Model Model URL vælger binding validering action Authorize Action Action filtre Action filtre filtre eksekveres ActionResult Result filtre Result filtre eksekveres ( View eksekveres ) Udvidet pipeline 24-03-2010 40 Copenhagen Software
  • 41. Udvidbarhed  IRouteHandler: oversætter URL til IHttpHandler ◦ ASP.NET MVC benytter en MvcRouteHandler. Med din egen IRouteHandler kan du helt forbigå ASP.NET MVC.  IModelBinder: binder request data til model og validerer ◦ Håndter binding anderledes (inject dependencies i model) ◦ Brug model meta data (indeholder valideringsinformation) anderledes  IControllerFactory: instantierer controllers ◦ Dependency Injection ◦ Find controllers i andre assemblies: dynamisk? Fra database?  IActionInvoker: eksekverer actions/results ◦ Håndter filtre anderledes ◦ Vælg anden view engine  IViewEngine: vælger view baseret på ActionResult ◦ Led efter views på en ny måde ◦ Brug særlig markup (NHaml, Spark mv.)  ModelMetaDataProvider / ModelValidatorProvider  Det er kun begyndelsen… Extension Points 24-03-2010 41 Copenhagen Software
  • 42. T4MVC  T4 template for MVC  Del af MVC Contrib på CodePlex  Kan hentes her: http://mvccontrib.codeplex.com/wikipage?title=T4MVC  Templaten genererer typer for strenge i et projekt <%= Html.ActionLink(”View note”, ”Details", ”Notes", new { id = Model.Id }, null)%> <%= Html.ActionLink(”View note", MVC.Note.Details(Model.Id))%> return View(”Edit"); return View(Views.Edit); Statisk typede strenge 24-03-2010 42 Copenhagen Software
  • 43. Deployment  ASP.NET MVC består af en række assemblies, som blot kan bin-deployes: ◦ System.Web.Routing.dll ◦ System.Web.Mvc.dll ◦ System.Web.Abstractions.dll  ASP.NET MVC kan køre på både IIS 6.0 og IIS 7.0, men sidstnævnte er mest velegnet ◦ IIS 6.0 har udfordringer med extension-less routes ◦ IIS 7.0 kan med fordel benytte Integrated Pipeline  Kan også benyttes på Mono  MVC 1.0 og MVC 2.0 kan installeres side-by-side Krav til miljø 24-03-2010 43 Copenhagen Software
  • 44. ASP.NET MVC Officiel hjemmeside og CodePlex www.asp.net/mvc aspnet.codeplex.com MVCContrib http://mvccontrib.codeplex.com Blogs weblogs.asp.net/Scottgu www.haacked.com www.hanselman.com Hvordan kommer jeg videre? 24-03-2010 44 Copenhagen Software
  • 45. Copenhagen Software Software as a Service konsulenter www.copenhagensoftware.com mail@copenhagensoftware.com Spørgsmål? 24-03-2010 45 Copenhagen Software