• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Mvc 1+2 Tech Talk 201003
 

Mvc 1+2 Tech Talk 201003

on

  • 2,799 views

An introduction to the ASP.NET MVC framework by SaaS consultants Copenhagen Software. In Danish.

An introduction to the ASP.NET MVC framework by SaaS consultants Copenhagen Software. In Danish.

Statistics

Views

Total Views
2,799
Views on SlideShare
2,795
Embed Views
4

Actions

Likes
1
Downloads
48
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Mvc 1+2 Tech Talk 201003 Mvc 1+2 Tech Talk 201003 Presentation Transcript

    • 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