ASP.NET MVC. Copyright Mahmud Al Hakim mahmud@dynamicos.se http://www.webbacademy.se. Innehåll



Relevanta dokument
Asp.net mvc intro PER KVARNBRINK,

// GET: Test1/Index2 // Syftet är att se hur olika url:er leder till olika actions

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

MVC med Javascript och Ajax. Filip Ekberg

MVC med Javascript och Ajax. Filip Ekberg

Räkna med ASP.NET MVC 3

ASP.NET Web Forms. Copyright Mahmud Al Hakim Vad är Web Forms?

Kursplanering Utveckling av webbapplikationer

Övning MS SQL och MVC del 2

Sidan kommer inte läggas upp någonstans utan du redovisar den för mig på något handledningstillfälle.

Webbprogrammering. Sahand Sadjadee

ASP.NET Web Pages. Copyright Mahmud Al Hakim Först lite Classic ASP :-)

JavaScript in SharePoint and not just for Apps. Wictor Wilén

Innehåll. Dokumentet gäller från och med version

MVC med Javascript och Ajax. Filip Ekberg

Webbprogrammering - 725G54 PHP. Foreläsning II

Lektion 2, Grundläggande funktioner i ASP.NET

Avancerade Webbteknologier

Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi<er

E12 "Evil is going on"

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Objektorienterad programmering Föreläsning 2

Räkna med ASP.NET Web Forms

INTRODUKTION TILL ANGULAR JS

Labora&on 8 Formulär övningar/uppgi6er

Zimplit CMS Manual. Introduktion. Generell Information

Appar med ryggrad. Introduktion till JavaScriptramverket Backbone

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

Övning: Arbeta med Azure Explorer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Lab 5: ASP.NET 2.0 Site Navigation

ASP.NET Thomas Mejtoft

Introduktion till PHP

Lab 5: ASP.NET 4.5 Site Navigation

MVC-mönster i ASP.NET Projektblogg bygghemma.se

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

<script src= "

Labb 3: ASP.NET 4.5 Anpassningar av användargränssnittet: Master Pages, Teman, och Kontroller

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Lab 6: ASP.NET 2.0 Providermodellen

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Mappar och filer för webbsidor

e-line Kort- och Bankbetalning

Komponenter med COM (och COM+/VC++ 7.0)

Sammanfattning. Applikationen är utvecklad i Microsofts utvecklingsmiljö Visual Studio 2012.

E11 "Protection" Föreläsning 11, HT2014 Säkerhet, tillgänglighet. Johan Leitet. Kurs: 1dv403 Webbteknik I

Language Integrated Query, LINQ, och databaser

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Kom igång med Web Editor

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

MVC med Javascript och Ajax. Filip Ekberg

Skriv före adressen och lämna bort www enligt modellen:

Introducerande övningar i HTML

Föreläsning 4. CSS Stilmallar för webben

Lathund - Redigera innehåll på Comfort Audios webbplats. 1. Logga in i WordPress Ändra/lägg till användare Lägga till nya sidor...

Diagnostisktprov Utveckla i Azure

Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi<er

Labora&on 2 HTML och validering övningar/uppgi:er

Laboration 1 Introduktion till Visual Basic 6.0

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

Services + REST och OAuth

Konfigurera Wordpress som Hemsida istället för blogg

Webbsidor och webbservrar

Joomla CMS Del 2 av 2

Webbservrar, severskript & webbproduktion

JAVASCRIPT. Beteende

På många sätt är webben, när det kommer till kritan, en samling länkar. Inom varje given plats, gör länkarna det möjligt att snabbt navigera från ett

Laboration 10 - Eclipse

Objektorienterad programmering Föreläsning 11. Copyright Mahmud Al Hakim

Installationsanvisning för Su Officemallar 2011 För Mac Word och PowerPoint

Grundläggande programmering med C# 7,5 högskolepoäng

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

Labb 1: Skapa en website

Introduktion till Entity Framework och LINQ. Källa och läs mer

CMS. - Content management system

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

Övning: Skapa en ny regel

LATHUND FRONTPAGE 2000 SV/EN

Arbetshäfte Office 365 en första introduktion

Webbteknik för ingenjörer

Stored procedure i ASP.NET

Modul 8 Hantering av indata

Programbeskrivning. Chaos på Web. Version

Snabbguide Visma Compact API Copyright Visma Spcs AB

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

E13 "Behind the Wild"

Internationalisering/lokalisering på webben

MVC med Javascript och Ajax. Filip Ekberg

Next -> Next -> Finish

F8 Webbteknologier 1. Dynamiska webbsidor

Labb 1: Skapa en webbsite

Välkommen som användare av medietekniks och informatiks publika studentserver

» RSS - Bygg din egen RSS!

OOP Objekt-orienterad programmering

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Formulär i Sitecore. Innehåll. Inlogg sitecore:

LATHUND FRONTPAGE 2000

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

MVC med Javascript och Ajax. Filip Ekberg

Namn: (Ifylles av student) Personnummer: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Transkript:

ASP.NET MVC Copyright Mahmud Al Hakim mahmud@dynamicos.se http://www.webbacademy.se Innehåll Introduktion till MVC Controller Action-metoder Views Arbeta med Layout-sidor och sektioner Route konfiguration Models MVC-formulär Säkerhet och validering Skicka data till en textfil 2 ASP.NET MVC 1

Vad är MVC? MVC står för Model-View-Controller. MVC är ett Designmönster (design pattern) som används för att organisera komplexa applikationer. Introducerades 1979 tillsammans med programspråket Smalltalk. Med MVC delar man upp en applikation i separata lager. Model: Data som ska bearbetas och hur detta är organiserat. View: Användargränssnitt. Hur data ska presenteras för användaren. Controller: Inputlogik och vilka operationer ska utföras på data. Separation mellan olika enheter inom en applikation kallas för Separation of Concerns. System ska bli lättare att designa, underhålla och förstå då man ser på dess olika delar som separata enheter med definierade ansvarsområden. 3 MVC Interactions Källa: http://en.wikipedia.org/wiki/model-view-controller 4 ASP.NET MVC 2

Vad är ASP.NET MVC? ASP.NET MVC Framework är Microsofts MVC-ramverk för att skapa dynamiska webbsidor. Tekniken bygger på.net och delar många funktioner med klassisk ASP.NET. Den första officiella versionen (ASP.NET MVC 1.0) släptes 2009. ASP.NET MVC gör det möjligt att skapa applikationer som kan testas och underhållas (Test-driven development TDD). Ger bättre kontroll över HTML som renderas. 5 En första ASP.NET MVC Site Starta Visual Studio 2013 Skapa ett nytt projekt av typen ASP.NET Web Application. (finns under Visual C# - Web). Välj mallen MVC Välj No Authentication. 6 ASP.NET MVC 3

Mappstrukturen En typisk ASP.NET-MVCapplikation har följande mappstruktur. Vissa mappar är obligatoriska! Tips Behåll standardstrukturen. Ta inte bort eller ändra mapp- eller filnamn, om du inte 100% säker på vad du gör. 7 Controller Controller tar hand om användarens handlingar t.ex. en knapptryckning. Beroende på användarens val skickas info från en aktuell View till en Controller. Controller i sin tur skickar vidare info antingen till en Model eller en View. En kontroller är en cs-klass som innehåller ett antal metoder. Alla kontroller-klasser måste ärva från klassen Controller och måste avslutas med ordet Controller t.ex. HomeController.cs 8 ASP.NET MVC 4

HomeController.cs public class HomeController : Controller public ActionResult Index() return View(); En Action-metod returnerar en View som heter Index... 9 Index.cshtml (View) @ ViewBag.Title = "Välkommen till MVC"; <div class="jumbotron"> <h1>asp.net</h1> <p class="lead"> ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript. </p> </div>... 10 ASP.NET MVC 5

ViewBag ViewBag är en dynamisk Data Dictionary. Både Action-metoden och dess motsvarande View har tillgång till detta objekt. public ActionResult About() ViewBag.Message = "Välkomemn till MVC"; return View(); 11 Skapa en ny ViewBag Controller public ActionResult Index() ViewBag.Hej = DateTime.Now.Hour < 12? "God morgon" : "God dag"; return View(); View @ ViewBag.Title = "Hem"; <h2>@viewbag.hej</h2> 12 ASP.NET MVC 6

About.cshtml (View) @ ViewBag.Title = "About"; <h2>@viewbag.title</h2> <h3>@viewbag.message</h3> 13 Layout (Template) I mappen Views -> Shared finns en mall som heter _Layout.cshtml Innehållet i filen _ViewStart.cshtml skickas till alla vyer automatiskt. I denna fil finns en Layout-direktiv som sätter sökvägen till layout-filen. @ Layout = "~/Views/Shared/_Layout.cshtml"; 14 ASP.NET MVC 7

Skapa en Partial View 15 _Meny.cshtml (En Partial View) Filen innehåller enbart en meny (inget annat). <ul class="nav navbar-nav"> <li> @Html.ActionLink("Home", "Index") </li> <li> @Html.ActionLink("About", "About", "Home") </li> <li> @Html.ActionLink("Contact", "Contact", "Home") </li> </ul> 16 ASP.NET MVC 8

Använd en Partial View i filen _Layout.cshtml... <div class="navbar-collapse collapse"> @Html.Partial("~/Views/Shared/_Meny.cshtml") </div>... 17 HTML Helpers MVC innehåller ett antal helpers till de mest vanliga typer av HTML-element. Exempel ActionLink skapar en länk till en Action-metod i en Controller @Html.ActionLink("Om oss", "About", "Home") Skapar följande länk <a href="/home/about">om oss</a> Home är namnet på en Controller och About är namnet på en Action-metod 18 ASP.NET MVC 9

Sektioner (Lägg till några sektioner i Layout-sidan)... @RenderBody() @RenderSection("Annons1", false) @RenderSection("Annons2", false) <hr> <footer> <p> @DateTime.Now.Year</p> </footer>... 19 Använd valfria sektioner på valfria sidor (Views) @section Annons1 <div> <h1>här kommer annons 1</h1> </div> @section Annons2 <div> <h1>här kommer annons 2</h1> </div> 20 ASP.NET MVC 10

Tips! Ändra CSS-Mallen Gå till https://bootswatch.com/ Klicka på Themes Välj en CSS-Mall och klicka på Download Ladda ner bootstrap.css Spara i mappen Content. Ersätt den gamla! 21 Skapa en ny Controller Högerklicka på mappen Controllers Välj Add -> Controller Skapa en tom Contoller (Empty) 22 ASP.NET MVC 11

Skapa en ny Action-metod public class HejController : Controller public ActionResult Index() return View(); Hur ser URLen ut för metoden Hello()? public string Hello() return "Hej min första Controller"; 23 En Action-metod med GET-Parametrar public string Hello(string namn, string age) return "Hej " + namn + ". Din ålder: " + age ; 24 ASP.NET MVC 12

HtmlEncode Tips. Använd metoden HtmlEncode i klassen HttpUtility för att skydda applikationen från skadlig kod. Då skickas inga HTML-taggar eller andra teckenkoder. Exempel: public string Hello(string data) return HttpUtility.HtmlEncode(data); Testkör, skicka specialtecken (t.ex. ÅÄÖ) Se källkoden! 25 Global.asax Filen Global.asax innehåller metoden Application_Start som startas automatiskt när applikationen startas. Metoden anropar ett antal inställningsmetoder Configuration Methods Bl.a. RouteConfig.RegisterRoutes(RouteTable.Routes); 26 ASP.NET MVC 13

RouteConfig Finns i mappen App_Start Klassen RouteConfig har metoden RegisterRoutes som tar emot en referens till ett RouteCollection-objekt. Med hjälp av detta objekt sätts bl.a. en MapRoute routes.maproute( name: "Default", url: "controller/action/id", defaults: new controller = "Home", action = "Index", id = UrlParameter.Optional ); 27 Skapa en ny MapRoute routes.maproute( name: "Welcome", url: "Welcome", defaults: new Controller = "Hej", Action = "Hello" ); OBS! En ny MapRoute måste ligga före "Default" 28 ASP.NET MVC 14

Skapa en ny View Högerklicka på en Action-metod och välj Add View 29 Skapa en ny Model Markera mappen Models och lägg till en ny klass. namespace HejMVC.Models public class Hello public string Hej get return DateTime.Now.Hour < 12? "God morgon" : "God dag"; 30 ASP.NET MVC 15

Använd en Model i en Controller using HejMVC.Models; namespace HejMVC.Controllers public class HejController : Controller public ActionResult Index() var model = new Hello(); return View(model); 31 Skapa en View som använder en Model via en Controller @model HejMVC.Models.Hello <h2>@model.hej</h2> 32 ASP.NET MVC 16

Skapa ett MVC-formulär med hjälp av HTML Helpers @ ViewBag.Title = "Kontakt"; <h2>@viewbag.title.</h2> @using (Html.BeginForm()) <label for="namn">namn</label><br> @Html.TextBox("namn"); <br> <label for="epost">e-post</label><br> @Html.TextBox("epost"); <br> <label for="meddelande">meddelande</label><br> @Html.TextArea("meddelande"); <br> <input type="submit" value="skicka"> Uppdatera filen Contact.cshtml (View) 33 Data skickas tillbaka till Controller [HttpGet] public ActionResult Contact() ViewBag.Message = "Your contact page."; return View(); [HttpPost] public string Contact(string namn) return "Tack " + namn; 34 ASP.NET MVC 17

Validera med hjälp av en Model Skapa en ny Model (KontaktForm.cs) using System.ComponentModel.DataAnnotations; namespace HejMVC.Models public class KontaktForm [Required(ErrorMessage="Ange ditt namn!")] public string Namn get; set; [Required(ErrorMessage ="Ange E-post!")] [EmailAddress(ErrorMessage="Ange en giltig E-postadress!")] public string Epost get; set; [Required(ErrorMessage="Skriv ett meddelande!")] public string Meddelande get; set; 35 Uppdatera Controller [HttpGet] public ActionResult Contact() return View(); [HttpPost] public ActionResult Contact(KontaktForm kontakt) if(!modelstate.isvalid) return View(kontakt); return RedirectToAction("Tack", "Home"); OBS! Tack är en Action-metod Som måste skapas 36 ASP.NET MVC 18

Använd modellen i Contact.cshtml @model HejMVC.Models.KontaktForm @ ViewBag.Title = "Kontakt"; <h2>@viewbag.title</h2> @using (Html.BeginForm()) <div>@html.validationsummary()</div> <label for="namn">namn</label><br> @Html.TextBox("namn"); @Html.ValidationMessage("namn") <br> <label for="epost">e-post</label><br> @Html.TextBox("epost"); @Html.ValidationMessage("epost") <br> <label for="meddelande">meddelande</label><br> @Html.TextArea("meddelande", new @cols = "80", @rows = "4" ); @Html.ValidationMessage("meddelande") <br> <input type="submit" value="skicka"> 37 Action-metoden Tack som returnerar en View public ActionResult Tack() return View(); Filen Tack.cshtml @ ViewBag.Title = "Tack"; <h2>tack</h2> 38 ASP.NET MVC 19

Skicka data till en textfil public ActionResult Contact(KontaktForm kontakt) if(!modelstate.isvalid) return View(kontakt); else using (StreamWriter writer = new Glöm inte att using System.IO; Och spara textfilen i mappen App_Data för att skydda! StreamWriter(Server.MapPath("~/App_Data/kontaktform.txt"), true)) writer.writeline(kontakt.namn+";"+ kontakt.epost + ";" + kontakt.meddelande); return RedirectToAction("Tack","Home"); 39 Säkerhet Cross Site Request Forgery (CSRF) CSRF är en hacker attack. Kallas även one-click attack eller Session Riding. Attacken går ut på att locka användare till att klicka på en länk, förutsatt att någon form av kakor-baserat system används och offret har en giltig autentiseringskaka. Då kommer användarens webbläsare att skicka en begäran tillsammans med autentiseringskakan till webbservern som i sin tur kommer att utföra begäran eftersom den tror att offret avsiktligt har skickat denna begäran! 40 ASP.NET MVC 20

Lägg till metoden AntiForgeryToken() i formuläret @using (Html.BeginForm()) @Html.AntiForgeryToken()... Formuläret generar en hemlig token och är användarspecifik. När formuläret postas kontrollerar servern om denna token är korrekt. 41 Lägg till attributet ValidateAntiForgeryToken i Action-metoden som använder Post [HttpPost] [ValidateAntiForgeryToken] public ActionResult Contact(KontaktForm kontakt)... Om man tar bort metoden AntiForgeryToken() från formuläret så går det inte att posta. (Testa gärna!) 42 ASP.NET MVC 21