MVC BASICS 2. Kevin Picalausa

Vergelijkbare documenten
4 ASP.NET MVC. 4.1 Controllers

HTTPS. HTTP over SLL Publieke sleutel certificaat Getekend door betrouwbare bron In transport laag

ASP.NET Test Jan Van Ryckeghem

Dynamische websites met PHP (basis) Karel Nijs 2010/09

Formulieren maken met Dreamweaver CS 4/CS 5

Handleiding RS Form! 1.0.4

Formulieren en waarden posten naar een view

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

NHibernate als ORM oplossing

Object Oriented Programming

File Uploads met standaard ASP.NET

Les 9: formulier controle met javascript.

Een website maken met databasetoegang.

Formulieren maken met Dreamweaver CS 4

Gebruik van cryptografie voor veilige jquery/rest webapplicaties. Frans van Buul Inter Access

Web Application Security Hacking Your Way In! Peter Schuler & Julien Rentrop

Web building gevorderden: CSS & JavaScript. Karel Nijs 2008/11

Technical Note. API Beschrijving Aangetekend Mailen

AJAX (XMLHttpRequest)

VoipCenter Application Programming Interface (API)

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Les 15 : updaten van gegevens in de database (deel2).

Dit kan gebruikt worden in zowel een ASP.NET web applicatie als een desktop applicatie.

Dynamische Websites. Week 2

HTTP SMS API Technische Specificatie messagebird.com versie mei 2014

Een formulier ontwerpen

Handleiding Formulieren in TYPO3 Versie 1.2, 18 juli 2008

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions?

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.

Externe pagina s integreren in InSite en OutSite

Security Pentest. 18 Januari Uitgevoerde Test(s): 1. Blackbox Security Pentest 2. Greybox Security Pentest

Dynamische Websites. Week 3. donderdag 3 oktober 13

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Back to the Future. Marinus Kuivenhoven Sogeti

Lab Webdesign: Javascript 7 april 2008

INHOUDSOPGAVE Het Boekenwinkeltje Registreer.aspx Opgaven... 97

ASRemote WebService. Via deze webservice kunt u:

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Katholieke Hogeschool Kempen ASP

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Domein API Handleiding

SQL datadefinitietaal

<compilation debug="true" targetframework="4.0"/> // laten staan (auto)

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

Handleiding DirectAdmin

Dynamische Websites. Week 6. vrijdag 25 oktober 13

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

ArcGIS Mobile ADF. Smart Client Applicaties voor ArcGIS Server Eva Dienske, Wim Ligtendag

Formulierbeheer Importeren bestaand (model)formulier... 2 Wat is exporteren/importeren eigenlijk?... 3 Formulier aanpassen/opbouwen...

DigiD-authenticatie in SharePoint

Je website (nog beter) beveiligen met HTTP-Security Headers

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

SecureLink Customer portal handleiding

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april Versie 2.1.0

Handleiding DirectAdmin

Dynamische webapplicaties in Java

Implementatie AssurePay ASP.NET. ideal

IBAN API. Simpel & krachtig. Documentatie : IBAN REST API Versie : 1.0 DE BETAALFABRIEK

Ordina VSM Customer Portal

Security web services

XML Datafeeds. Volledig geautomatiseerd advertenties plaatsen V

Handleiding: Whitelabel Customersite

Databanken en webtoepassingen in Java

Handleiding Invoeren van een Catia V5R19 document in SmarTeam

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Handleiding DirectAdmin

Verhoog je productiviteit in Teamcenter: maak gebruik van de stylesheets!

Sparse columns in SQL server 2008

Webapplication Security

Eindtoets XML: Theorie en toepassingen

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

Aanleveren van te verzenden sms berichten aan SMS Via

Er zijn diverse andere software platformen en providers die werken met SIP, maar in dit voorbeeld gaan we uit van de volgende software:

Zo kan je linken maken tussen je verschillende groepen van gegevens.

GEBRUIK VAN FINCH V PROCEDURE. 1.1 Software. 1.2 Aanvraagprocedure

Handleiding Facultaire website Expression Engine

Testondersteuning in frameworks voor webapplicaties

Software Design Document

MVC BASICS. Kevin Picalausa

Foutcontrole met Javascript

ContentSearch. Deep dive

Datum: Gemaakt door: Berend de Groot Voor: ComSi, ROC Friese Poort

1. Milieuklacht Handleiding opladen XML in mkros Werken met Refertes... 5

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

ibabs Public WCF Service

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

Website van het openbaar ministerie Korte gebruikershandleiding voor Content Managers

Delmation Products BV Tel: +31 (0)

Inhoud. Pagina 2 van 13

Transcriptie:

MVC BASICS 2 Kevin Picalausa 1

Forms 2

Action en Method Action Vertelt de Browser naar waar de form data (informatie) door te zenden. URL kan relatief of absoluut zijn. Method De manier waarop de form data doorgezonden wordt. HTTP GET De data waarden (input names) worden in de query string geplaatst. HTTP://www.google.be/search?q=ikdoeict HTTP POST De data waarden worden in de body van de HTTP request geplaatst. 3

GET of POST HTTP GET (+) Bookmarks Hyperlink in email Read only = je kan meerdere keren een GET sturen naar de server (no change of state) HTTP POST (+) Gebruikt voor update, create, delete acties (changes the state) Herhalen van form submits kan ongewenste problemen veroorzaken 4

HTML helper - form @using (Html.BeginForm("Search", "Home", FormMethod.Get)) @Html.Label("Search:") @Html.TextBox("txtSearch") <input type="submit" value="search" /> ActionName: Search ControllerName: Ex. HomeController Method: FormMethod.Get FormMethod.Post <form action="/home/search" method="get"> <label for="search:">search:</label> <input id="txtsearch" name="txtsearch" type="text" value="" /> <input type="submit" value="search" /> </form> 5

HtmlAttributes Bijna elke HTML helper binnen het MVC Framework heeft een htmlattributes parameter. Je kan met een komma gescheiden zo veel attributen toevoegen als gewenst. [!] Het class attribuut is een keyword binnen C# en zal vervangen worden door @class [!] Het - teken zal vervangen worden door een _ omdat dit geen toegestaan teken is binnen C# @using (Html.BeginForm("Search", "Home", FormMethod.Get, new target="_blank", @class="editform", data_validatable=true )) <form action="/home/search" class="editform" data-validatable="true" method="get" target="_blank"> 6

@using (Html.BeginForm("Search", "Home", FormMethod.Get)) @Html.ValidationSummary(true) @Html.ValidationMessage( Name") Geef een overzicht van al de errors die er in de ModelState zitten Validation summary True / false: vertelt de helper of property-level items uit het overzicht dienen gelaten te worden of niet. Je beslist met andere woorden of je enkel model errors wil weergeven of juist enkel diegene niet model-gerelateerd. ModelState.AddModelError("", "De ingevoerde gebruiker is niet gevonden!"); (1) ModelState.AddModelError("Name", "Wat een lelijke naam!"); (2) 1. Model-level error 2. Geassocieerd met een eigenschap (property): Name 7

AntiForgeryToken View: @Html.AntiForgeryToken() Controller: [HttpPost] [ValidateAntiForgeryToken()] Zekerheid dat een formulier (POST actie) ook effectief gegenereerd werd op dezelfde server. Hiermee gaan we CSRF (Cross Site Request Forgery) tegen. 8

CSRF Bron: http://www.opensourceforu.efytimes.com/ 9

Custom entities 10

LINQ2SQL Gratis Business laag Autogenerated Voorgemaakte klassen Wat als we eigenschappen of methoden willen toevoegen zonder alles kwijt te zijn na refresh van het datamodel? 11

Uitbreiding op de bestaande LINQ2SQL klassen. [!] naamgeving dient identiek te zijn als bestaande klasse [!] dient aangemaakt te worden als partial klasse [!] eigenschappen (properties) dienen ook onder identieke naam gebruik te worden [!] binden van het datamodel [MetadataType(typeof(customNewsmessage))] public partial class newsmessage // methoden voor bv. specifieke berichten op te halen Custom Entitie public class customnewsmessage [Required(ErrorMessage = "Vul een titel in!")] [StringLength(50, MinimumLength = 5, ErrorMessage = "Een titel bestaat uit minimum 5 karakters")] [Display(Name = "Titel")] public string title get; set; 12

Validatie en data annotatie 13

Data validatie Binnen het MVC design patroon ligt de nadruk op model validatie. Heeft de gebruiker correcte data ingegeven? Is het getal binnen bereik (bv. 5 55 )? Validatie regels a.d.h.v.: data annotations Validatie opties zijn uitbreidbaard (custom validators) 14

Validatie annotatie Data annotaties kan je terugvinden in de System.ComponentModel.DataAnnotations namespace. Deze attributen zorgen voor server-side validatie. Het framework zorgt bij gebruik binnen een view voor client-side validatie. Client- en server-side validatie is dus in sync (gelijkend => 1 attribuut) Er zijn maar 4 attributen die zorgen voor validatie. 15

Required Het attribuut geeft een fout wanneer: Null Empty [Required(ErrorMessage = "Vul een titel in!")] public string title get; set; @Html.LabelFor(m => m.title) @Html.TextBoxFor(m => m.title) @Html.ValidationMessageFor(m => m.title) 16

StringLength & Range Helpt te voorkomen dat ingevoerde waarden groter zijn dan de vermelde limiet in DB. [Required(ErrorMessage = "Vul een titel in!")] [StringLength(50, MinimumLength = 5, ErrorMessage = "Een titel bestaat uit minimum 5 karakters")] public string title get; set; Minimum en maximum bepaling voor een ingevulde waarde [Range(0,55)] [Range(typeof(decimal), "0.00", "49.99")] public int Age get; set; 17

RegularExpression & Compare Email, datum, telefoonnummer, rekeningnummer, [RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]2,6$", ErrorMessage = "Email adres is niet correct")] public string email get; set; [Compare("email")] public string EmailConfirm get; set; [EmailAddress(ErrorMessage = "Email adres is niet correct")] public string email_2 get; set; 18

Model binding Het MVC framework voert de validatielogica uit wanneer het model bind. Model binding ter validatie kan enkel plaatsvinden wanneer je het als parameter meegeeft in een Actie-methode. [HttpPost] [ValidateAntiForgeryToken()] public ActionResult insertnews(newsmessage entry) return View(entry); 19

Validation & Model state Modelstate: Bevat al de values die een gebruiker probeerde in te geven via het model. Bevat al de errors die verbonden zijn aan het model. Controller: If( ModelState.IsValid ) ModelState.IsValidField( Name ) ModelState[ Name ].Errors.Count >0 20

Voorbeeld: controle foto upload (Ja/nee) + > 1MB Custom annotation public class ValidateFileAttribute : RequiredAttribute public override bool IsValid(object value) var file = value as HttpPostedFileBase; if (file == null) return false; if (file.contentlength > 1 * 1024 * 1024) return false; return true; [ValidateFile(ErrorMessage = "Gelieve een foto up te loaden, kleiner dan 1MB")] public HttpPostedFileBase file get; set; 21

Display, DisplayFormat Display: set de zichtbare naam voor de model eigenschap. (Label) [AllowHtml] [Required(ErrorMessage = "Vul een bericht in!")] [Display(Name = "Bericht")] public string message get; set; @Html.LabelFor(m => m.message) DisplayFormat: formatting van ingegeven form-data (bv. geld) [Required(ErrorMessage = "*")] [DisplayFormat(DataFormatString = "0:d")] [DataType(DataType.Date)] public DateTime Birthdate get; set; 22

DataType Helpt je om het doel van een property te verfijnen. Bv. Paswoord = Karakters niet leesbaar op scherm. [Required(ErrorMessage = "*")] [DataType(DataType.Password)] [Display(Name = "Paswoord")] public string Password get; set; 23

Viewdata, Viewbag, Session en Tempdata 24

Viewbag en Viewdata Er zijn 3 mechanismen om data van 1 pagina naar een andere over te dragen. Viewbag en Viewdata: het enige verschil tussen beiden is dat je data kan aanspreken a.d.h.v. een property ofwel via een array (string key principe). Infeite schrijven we dus data weg in een dictionary. Communicatie middel tussen de server call (tussen Controller en View) ViewData["Name"] = Kevin"; //Of ViewBag.Name = Kevin"; 25

Tempdata Tempdata: te gebruiken volgens het ViewData principe (dictionary string key array) Verschil: life cycle van het object. TempData["Name"] = "Kevin"; 26

Session //data aan een sessie toevoegen //genereert lijst van producten var products = Db.GetProducts(); //Producten in een sessie wegschrijven Session["products"] = products; //Data terug oproepen var products = Session["products"] as List<Product>; Session: te gebruiken volgens het ViewData principe (dictionary string key array) Zal opgeslagen worden in de Client cookie en kan voor een langere tijd gebruikt worden Tijd: bepaald in web.config //sessie wissen Session["products"] = null; // OF Session.Clear(); 27

Authorization en Membership 28

Authorization Met het AuthorizeAttribute stel je in of een gebruiker binnen je applicatie al dan niet rechten heeft om het ActionResult of zelfs een niveau hoger de controller uit te voeren. [Authorize(Roles = "admin")] Auto redirect naar Login page wanneer geen rechten (web.config) [KevinAuthorize(Roles = "admin")] 29

Custom Authorization public class KevinAuthorizeAttribute : AuthorizeAttribute protected override bool AuthorizeCore(HttpContextBase httpcontext) if (!httpcontext.user.identity.isauthenticated) // no user authenticated return false; // authenticated user string username = httpcontext.user.identity.name; return MyRoleProvider.CheckUserIsInRole(username, this.roles); 30

Membership - Controller // check if new user is created user usr = user.getuserbyemailandpassword(model.email.trim(), hashwithsaltpassword); // check if user exists if (usr!= null) //check if user wants to be remembered if (model.rememberme) FormsAuthentication.SetAuthCookie(usr.id.ToString(), true); else FormsAuthentication.SetAuthCookie(usr.id.ToString(), false); 31

Membership - View @if (Request.IsAuthenticated) <p> Hello, @Html.ActionLink(User.Identity.Name, "Index", "Home")! </p> //Aangemeld else //Login link <p>@html.actionlink("log in", "Index", "Login", routevalues: null, htmlattributes: new id = "login" ) </p> 32