ASP.NET MVC Framework - en del af ASP.NET 3.5 Extensions
|
|
|
- Lene Bjerre
- 10 år siden
- Visninger:
Transkript
1 ASP.NET MVC Framework - en del af ASP.NET 3.5 Extensions Captator Tlf: Carsten Juel Andersen Softwarearkitekt [email protected] Mobil: februar 2008 ASP.NET MVC Framework 1
2 Agenda MVC overblik Hvorfor?, Hvad?, Hvordan? Fra Controller, over Model til View Sammenhængen mellem Controller, Model og View URL routing Fleksibel og generel URL routing Håndtering af view data Hvordan flyttes data fra Controller til View Redigering af data Håndtering af Form redigering og postbacks februar 2008 ASP.NET MVC Framework 2
3 Disclamer Dette foredrag er (stort set) forældet inden I kommer hjem Dette foredrag bygger på ASP.NET 3.5 Extensions Preview af 9. dec 2007 MVC Toolkit ADO.NET Entity Framework beta 3 Nyt preview i forbindelse med MIX08 ( marts) Efter MIX08 releasen vil der formentlig komme en række CTP er frem mod den endelige release Se Scott Gu s blog (weblogs.asp.net/scottgu) med titlen: ASP.NET MVC Framework Road-Map Update Men mon ikke koncepterne forbliver nogenlunde som de er på nuværende tidspunkt?! februar 2008 ASP.NET MVC Framework 3
4 ASP.NET web forms ASP.NET web forms bygger på en Windows forms - weboplevelse bygger på en form per side bygger på event mekanisme bygger på et kontroltræ, hvor kontroller har navn efter, hvor i træet de er placeret benytter ViewState er i modsætning til traditionel web udvikling, hvor siden ofte vil indeholde en form for hver inputformular på siden De fleste public websites har kun et fåtal af sider, hvor alt dette er nødvendigt Det er svært at skille især kontrol- og user interfacelogik februar 2008 ASP.NET MVC Framework 4
5 MVC framework overblik Mål med Model View Controller frameworket At sikre en klar adskillelse mellem model, view, controller Model Model / entitetsobjekter / forretningsobjekter indeholder applikationens tilstand og persisteres ofte i eksempelvis en database View Ansvarlig for at displaye brugergrænsefladen Controller Håndterer brugerens input, manipulerer modellen og udvælger et view således at den næste side kan vises i brugergrænsefladen februar 2008 ASP.NET MVC Framework 5
6 MVC framework design principper Klar adskillelse af ansvar (model, view, controller) Optimeret for TDD baseret udvikling Test Driven Development (test-først programmering) Extensible / pluggable URL-mapping komponent, der giver mulighed for pæne og gennemskuelige URL er Eksisterende masterpages, web forms og userkontroller kan benyttes som view komponenter Postback-delen af disse kan ikke benyttes! Understøtter derudover alt ikke-ui baseret i ASP.NET Caching, URL autorisering, session handling etc. februar 2008 ASP.NET MVC Framework 6
7 Overblik over MVC demoen Time- og projektregistereringsapplikation Medarbejdere (Employee) kan registrere udførte opgaver (WorkRegistration) på givne projekter (Project) Man kan kun registrere på et givet projekt, hvis man har tilladelse (WorkAllowance) til at arbejde på projektet For hvert projekt er der en diskussionsliste. En medarbejder kan oprette et nyt eller besvare et tidligere indlæg (ProjectDiscussionEntry) februar 2008 ASP.NET MVC Framework 7
8 Overblik over den første MVC demo I første omgang vil vi se på Medarbejderliste Liste over den enkelte medarbejders registreringer Detaljevisning af registrering februar 2008 ASP.NET MVC Framework 8
9 Folderstruktur af ASP.NET MVC Applikation Der er 3 hovedmapper Controllers Som udgangspunkt er der en klasse for hver controller Models En eller flere modeller - f.eks. ved brug af LINQ to SQL eller LINQ to Entities Views Anbefaling: Placer model og modelhjælpeklasser i et selvstændigt projekt Undermapper for hver controller Shared indeholder fælles views februar 2008 ASP.NET MVC Framework 9
10 Eksekveringsrækkefølge Først routes URLen til den matchende controller Controlleren trækker view data ud af modellen Ud fra request parametrene View data sendes til viewet Default.aspx (View) url RegistrationController (Controller) view data Employee.aspx (View) Details.aspx (View) Model februar 2008 ASP.NET MVC Framework 10
11 RegistrationController Controller navn = klassenavn, dog uden Controller Actions er metoder på controllerklassen namespace MvcApplication.Controllers public class RegistrationsController : Controller [ControllerAction] public void Employees() [ControllerAction] public void Employee(string initials) URL = /Registrations/Employee/cja Controller navn = Registrations Action navn = Employees URL = /Registrations/Employees [ControllerAction] public void Details(System.Guid id) URL = /Registrations/Details/fdf2b7e4-0f9b-4c5b-ac37-27d5f3105ab3 februar 2008 ASP.NET MVC Framework 11
12 RegistrationController - parametre En input parameter kan mappes til en variabel i en action metode på forskellig vis [ControllerAction] public void Details() System.Guid id = new System.Guid(Request["id"]); URL = /Registrations/Details?id=fdf2b7e4-0f9b-4c5b-ac37-27d5f3105ab3 [ControllerAction] public void Details(System.Guid id) URL = /Registrations/Details?id=fdf2b7e4-0f9b-4c5b-ac37-27d5f3105ab3 [ControllerAction] public void Details(System.Guid id) URL = /Registrations/Details/fdf2b7e4-0f9b-4c5b-ac37-27d5f3105ab3 februar 2008 ASP.NET MVC Framework 12
13 Modellen Entitetsmodel genereret ud fra databasen februar 2008 ASP.NET MVC Framework 13
14 En komplet action metode Nu kan vi i action metoder hente data fra controlleren sende data videre til et view namespace MvcApplication.Controllers public class RegistrationsController : Controller [ControllerAction] public void Employees() EmployeeList employees = null; Anbefaling: Flyt tilgang til model (inklusive LINQ-queries) til klasser i Model -namespacet using (Model.Context context = new Model.Context()) employees = new EmployeeList(context.Employee.ToList<Employee>()); RenderView("Default", employees); februar 2008 ASP.NET MVC Framework 14
15 Viewet Benyt masterpages,.aspx og.ascx MVC frameworket ligger op til at holde html-koden så simpel som muligt Et view må kun have renderingslogik! Der benyttes følgende superklasser Masterpage.aspx.ascx System.Web.Mvc.ViewMasterPage System.Web.Mvc.ViewPage System.Web.Mvc.ViewUserControl februar 2008 ASP.NET MVC Framework 15
16 Viewet View placeres under Views mappen Opret undermappe for hver controller (samme navn som controlleren) Placer delte filer i Shared Når controller kalder RenderView Vælges view i undermappe med samme navn som controller, findes den ikke her vælges view fra Shared Dette er en out of the box sammenkædning mellem controller og view Det er muligt at plugge sin egen håndtering af dette ind i frameworket februar 2008 ASP.NET MVC Framework 16
17 View Viewet kaldes fra RegistrationsController [ControllerAction] public void Employees()... RenderView("Default", employees); Brug den generiske version af ViewPage til at angive typen for view data og få typestærk adgang der til public partial class Default : ViewPage<EmployeeList> public void Page_Load() ViewData[0]. februar 2008 ASP.NET MVC Framework 17
18 Rendering af viewet 2 forskellige principper for rendering 1. via inline code Fordel: Typestærk adgang til view data Ulempe: Serverside kode og HTML rodet sammen 2. via code behind og ASP.NET kontroller Fordel: Serverside kode og HTML adskilt Ulempe: Databinding er typesvag Referencer til andre sider indsættes via htmlhjælpemetoder, således at der ikke er hardkodede links på siden februar 2008 ASP.NET MVC Framework 18
19 Rendering af View via inline Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"... <asp:content ID="Content2" ContentPlaceHolderID="Main... <ul> foreach (Model1.Employee emp in ViewData) <li> = Html.ActionLink(emp.Firstname + " " + emp.lastname, new Controller = "Registrations", Action = "Employee/" + emp.initials ) </li> </ul> <asp:content> public partial class Default : ViewPage<EmployeeList> februar 2008 ASP.NET MVC Framework 19
20 View output Output er simpel html uden <form> tags Ingen lange WebForms ID er... <div id="maincontent"> <h2>timeregistrering</h2> <h3>ansatte:</h3> <ul> <li><a href="/registrations/employee/pla">peter Lauridsen</a></li> <li><a href="/registrations/employee/esv">erik Svendsen</a></li> <li><a href="/registrations/employee/moj">morten Jensen</a></li> <li><a href="/registrations/employee/hla">henriette Larsen</a></li> <li><a href="/registrations/employee/cja">carsten Juel Andersen</a></li> </ul> </div>... februar 2008 ASP.NET MVC Framework 20
21 Rendering af view via code behind aspx med brug af Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"... <asp:content ID="Content2" ContentPlaceHolderID="Main... <asp:repeater ID="repViewEmployees" runat="server" OnItemDataBound="repViewEmployees_ItemDataBound"> <HeaderTemplate> <ul> </HeaderTemplate> <ItemTemplate> <li> <asp:literal ID="litLink" runat="server" /> </li> </ItemTemplate> <FooterTemplate> </ul> </FooterTemplate> </asp:repeater> </asp:content> februar 2008 ASP.NET MVC Framework 21
22 Rendering af view via code behind... og den tilsvarende codebehind public partial class Default : ViewPage<EmployeeList> public void Page_Load() repviewemployees.datasource = ViewData; repviewemployees.databind(); protected void repviewemployees_itemdatabound( object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) if ((e.item.itemtype == ListItemType.Item) (e.item.itemtype == ListItemType.Item) ) System.Web.UI.WebControls.Literal litlink = (System.Web.UI.WebControls.Literal)FindControl("litLink"); Employee emp = (Employee)e.Item.DataItem; litlink.text = Html.ActionLink( emp.firstname + " " + emp.lastname, new Controller = "Registrations", Action = "Employee/" + emp.initials ); februar 2008 ASP.NET MVC Framework 22
23 Html.ActionLink helper metode HtmlHelper er del af MVCToolkit HtmlHelper kan tilgåes i Views via Html property ActionLink benytter den opsatte routing af controllere og actions til at skabe et link herudfra Eksempler på brug Kald parameterløs action på den kaldende controller Html.ActionLink("linktekst", "actionname"); Kald vilkårlig controller og action evt. med parametre Her benyttes en overload med en anonym klasse Html.ActionLink("linktekst", new Controller = "Registrations", Action = "Employee", Initials = "cja" ); februar 2008 ASP.NET MVC Framework 23
24 Anden MVC demo URL routing MVC indeholder en fleksibel URL routing mekanisme RouteTable (liste af routing regler) opbygges ved applikationens opstart Når et request modtages sendes det gennem routing systemet Hvis der findes et match kaldes den matchende controller, ellers fejler requestet url RouteTable Controller Controller Employee Controller Action Employee Controller Action Employee Controller Action Employee RegistrationController Action Employee Action februar 2008 ASP.NET MVC Framework 24
25 URL routing Default placering for opsætning af routing er i Global.asax.cs public class Global : System.Web.HttpApplication protected void Application_Start(object sender, EventArgs e) RouteTable.Routes.Add(new Route Url = "[controller]/[action]/[id]", Defaults = new action = "Index", id = (string)null, RouteHandler = typeof(mvcroutehandler) ); RouteTable.Routes.Add(new Route Url = "Default.aspx", Defaults = new controller = "Home", action = "Index", id = (string)null, RouteHandler = typeof(mvcroutehandler) ); februar 2008 ASP.NET MVC Framework 25
26 URL routing Url specifikation En Url specifikation kan være en eksakt Url en templated Url eller en kombination Url = "Min/Side" Url = "[controller]/[action]/[id]" Url = "Min/[action]/[controller]" En Route skal kunne fastlægge controller og action ved at [controller] og [action] indgår i URL eller ved at controller og action defineres som Defaults RouteTable.Routes.Add(new Route Url = "Min/Side", Defaults = new controller = "MinController", action = "Side" ), RouteHandler = typeof(mvcroutehandler) ); februar 2008 ASP.NET MVC Framework 26
27 URL routing Url specifikation Templated Url Url = "[controller]/[action]/[id]" "[tekst]" angiver en parameter Ovenstående vil blandt andet matche følgende /Home/Default Hvis der findes en HomeController med en Default action og en default værdi for id der er null /Registration/Employee/20 Hvis der findes en HomeController med en Employee action februar 2008 ASP.NET MVC Framework 27
28 URL routing fra Route til Controller (1) Med følgende Route og Url new Route Url = "[controller]/[action]/[id]", Defaults = new action = "Index", id = (string)null, RouteHandler = typeof(mvcroutehandler) ); /Registration/Employee/20 Vil Route skabe et RouteData objekt public class RouteData public RouteData(); public Route Route get; set; public IDictionary<string, object> Values get; Med en IDictionary indeholdende "Controller" = "Registration" "Action" = "Employee" "Id" = 20 februar 2008 ASP.NET MVC Framework 28
29 URL routing fra Route til Controller (2) RequestContext sendes til en RouteHandler public class RequestContext public RequestContext(IHttpContext httpcontext, RouteData routedata); public IHttpContext HttpContext get; internal set; public RouteData RouteData get; internal set; public interface IRouteHandler IHttpHandler GetHttpHandler(RequestContext requestcontext); MvcRouteHandler kalder den konkrete action i den givne controller public class MvcRouteHandler : IRouteHandler... Routing systemet er fleksibelt og kan benyttes i non-mvc scenarier Implementer blot egen RouteHandler februar 2008 ASP.NET MVC Framework 29
30 URL routing mange parametre Eksempel på brug af adskillige parametre public new Route Url = "Registrations/Employee/[initials]/[year]/[month]/[day]", Defaults = new controller = "Registrations", action = "Employee", year = (int?)null, month = (int?)null, day = (int?)null, RouteHandler = typeof(mvcroutehandler) ); Giver mulighed for at følgende URLer routes /Registrations/Employee/cja - alle registreringer på cja /Registrations/Employee/cja/ alle reg. på cja i 2008 /Registrations/Employee/cja/2007/12 - alle reg. på cja i december 2007 /Registrations/Employee/cja/2008/02/20 - alle reg. på cja i dag til følgende action [ControllerAction] public void Employee(string initials, int? year, int? month, int? day)... februar 2008 ASP.NET MVC Framework 30
31 Url routing validering af parametre De enkelte tokens (parametre) i Url en kan også valideres new Route Url = "Registrations/Employee/[initials]/[year]/[month]/[day]", Defaults = new controller = "Registrations", action = "Employee", year = (int?)null, month = (int?)null, day = (int?)null, Validation = new initials 3,4" RouteHandler = typeof(mvcroutehandler) ); Dette resulterer i at initials skal være 3-4 bogstaver (letters) for, at denne Route kan benyttes februar 2008 ASP.NET MVC Framework 31
32 Url routing udgående url er For at routing reglerne kan være fuldstændigt afkoblede, er det også nødvendigt at kunne oprette links ud fra de samme regler Benyt HtmlHelper instansen til links Html.ActionLink Html.ActionLink("linktekst", new controller = "Home", action = "Default" ); Benyt Controller.RedirectToAction til at redirigere til en anden side RedirectToAction udløser en Response.Redirect RedirectToAction( new controller="home" action="default" ); februar 2008 ASP.NET MVC Framework 32
33 Tredje MVC demo fra controller til view Views må kun bero på de data Controller leverer ViewData overføres fra Controller til View [ControllerAction] public void Employees()... RenderView("Default", employees); Default.aspx (View) url RegistrationController (Controller) view data Employee.aspx (View) Details.aspx (View) Model februar 2008 ASP.NET MVC Framework 33
34 Overførsel af ViewData til viewet Siden med timerregistreringer for ansat skal udvides til også at vise stamoplysninger om ansat februar 2008 ASP.NET MVC Framework 34
35 Typesvag overførsel af ViewData I controlleren kan ViewData tilføjes typesvagt [ControllerAction] public void Employee(string initials, int? year, int? month, int? day) // Her hentes data fra modellen ViewData["Employee"] = employee; ViewData["Registrations"] = registrations; RenderView("Employee"); til følgende view public partial class Employee : Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Navn: = ((Employee)ViewData["Employee"]).Firstname... foreach (Model1.WorkRegistration wr in ((WorkRegistrationList)ViewData["Registrations"]))... februar 2008 ASP.NET MVC Framework 35
36 Typestærk overførsel af ViewData (1) Ved hjælp af et specifikt ViewData-objekt public class EmployeeViewData public Model.Employee Employee get; set; public Model.WorkRegistrationList RegList get; set; kan ViewData tilføjes typestærkt i controlleren [ControllerAction] public void Employee(string initials, int? year, int? month, int? day) // Her hentes data fra modellen RenderView("Employee", new Views.Registrations.EmployeeViewData Employee = employee, RegList = registrations ); februar 2008 ASP.NET MVC Framework 36
37 Typestærk overførsel af ViewData (2) og ved at tilføje ViewData-klassen som typeparameter på viewet public partial class Employee : ViewPage<EmployeeViewData> er der typestærk adgang til Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Navn: = ViewData.Employee.Firstname... <ul> foreach (Model1.WorkRegistration wr in ViewData.RegList) <li> = wr.date.toshortdatestring() : = wr.title - = ConvertToReadableTime(wr.TimespanInMinutes) - = Html.ActionLink("Se detaljer", new Action="Details", Id=wr.WorkRegistrationId ) </li> </ul>... februar 2008 ASP.NET MVC Framework 37
38 Brug af ViewUserControl (1) UserControls kan benyttes til at minimere dubleret kode, når dele af layout/funktionalitet går igen fra side til side (det er der jo ikke noget nyt i) ViewUserControl indsættes på et view nøjagtigt som UserControls indsættes i web Page Language="C#" Register src="employeedetailscontrol.ascx" tagname="employeedetailscontrol" tagprefix="uc1"... <uc1:employeedetailscontrol ID="EmployeeDetailsControl1" ViewDataKey="Employee" runat="server" />... ViewData kan være identisk med sidens eller være en udsnit af de oprindelige ViewData Hvis ViewDataKey property er sat Anbefaling: Gør ViewUserControl typestærk og benyt ViewDataKey februar 2008 ASP.NET MVC Framework 38
39 Brug af ViewUserControl (2) Gør ViewData på ViewUserControl typestærk public partial class EmployeeDetailsControl : ViewUserControl<Employee> således at der er typestærk tilgang til Control Language="C#" CodeBehind="EmployeeDetailsControl.ascx.cs"... Navn: = ViewData.Firstname = ViewData.Lastname... På viewet sikres, at Employee sendes til ViewUserControl ved at sætte ViewDataKey... <uc1:employeedetailscontrol ID="EmployeeDetailsControl1" ViewDataKey="TheEmployee" runat="server" />... "TheEmployee" skal være en property på viewets ViewData af typen Employee februar 2008 ASP.NET MVC Framework 39
40 Fjerde MVC demo forms og post data Opret ny timeregistrering Redigering af eksisterende timeregistreringer februar 2008 ASP.NET MVC Framework 40
41 Forms og post data - eksekveringsfølge En action skaber data - en anden opdaterer data Registrations/DetailEdit RegistrationController Action = DetailsEdit view data DetailsEdit.aspx (View) Model Objekt(er) hentes fra modellen Postback RegistrationController Action = UpdateDetails Objekt(er) der er redigeret hentes fra modellen igen, opdateres herefter ud fra postback data og gemmes igen Model Fortsæt til ny side februar 2008 ASP.NET MVC Framework 41
42 Redigering af eksisterende objekt (1) Først oprettes links til opret og rediger Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" = Html.ActionLink("Opret ny", new Action="DetailsEdit" )... foreach (Model1.WorkRegistration wr in ViewState.RegList)... = Html.ActionLink("Rediger", new Action="DetailsEdit", Id=wr.WorkRegistrationId )... DetailsEdit action [ControllerAction] public void DetailsEdit(System.Guid id) WorkRegistration wr = // Hentes fra modellen RenderView("DetailsEdit", wr); februar 2008 ASP.NET MVC Framework 42
43 Redigering af eksisterende objekt (2) DetailsEdit oprettes med typestærk ViewData public partial class DetailsEdit : ViewPage<WorkRegistration> DetailsEdit Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" form action med URL, der <h2>rediger timeregistrering</h2> peger på UpdateDetails action <form action="/registrations/updatedetails/ " method="post"> = ViewData.WorkRegistrationId Dato: = Html.TextBox("Date", ViewData.Date.ToShortDateString()) <br /> Beskrivelse: = Html.TextBox("Title", ViewData.Title) <br /> <input type="submit" value="gem ændringer" /> </form>... Id en på textboxen skal være have samme navn som propertyen, der redigeres februar 2008 ASP.NET MVC Framework 43
44 Redigering af eksisterende objekt (3)... Html uden ViewState og lange id er <h2>rediger timeregistrering</h2> <form action="/registrations/updatedetails/cb09290e-12f3-4b33-99d3- c98d94c7a49f" method="post"> Dato: <input id="date" name="date" size="20" value=" "><br /> Beskrivelse:<input id="title" name="title" size="20" value="test af MVC framework"><br /> <input type="submit" value="gem ændringer" /> </form>... februar 2008 ASP.NET MVC Framework 44
45 Redigering af eksisterende objekt (4) Update action Form og get-parametre mappes automatisk til input parametre på action [ControllerAction] public void UpdateDetails(System.Guid id, System.DateTime date, int timespaninminutes, string title, string description) WorkRegistration wr; wr = // Hent eksisterende objekt fra modellen wr.date = date.date; wr.timespaninminutes = timespaninminutes; wr.title = title; wr.description = description; // Gem objektet i modellen RedirectToAction("Employees"); februar 2008 ASP.NET MVC Framework 45
46 Populering af dropdowns (1) Vi mangler at håndtere lister så der oprettes en dedikeret ViewData klasse public class WorkRegistrationEditViewData public WorkRegistration Wr get; set; public EmployeeList Employees get; set; public ProjectList Projects get; set; og i controller action en DetailsEdit tilføjes lister [ControllerAction] public void DetailsEdit (System.Guid id) WorkRegistrationEditViewData wredit = new WorkRegistrationEditViewData(); wredit.wr = // Hent WorkRegistration objekt fra modellen wredit.employees = // Hent alle Employees wredit.projects = // Hent alle Projects RenderView("DetailsEdit", wredit); februar 2008 ASP.NET MVC Framework 46
47 Populering af dropdowns (2) Brug af HtmlHelper-metoden Select... <form action="/registrations/updatedetails/ =ViewData.Wr.WorkRegistrationId. ToString() " method="post">... Dato: = Html.TextBox("Date", ViewData.Wr.Date.ToShortDateString()) <br /> Medarbejder: = Html.Select("EmployeeId", ViewData.Employees, (object)viewdata.wr.employee.employeeid.tostring())) <br />... <input type="submit" value="gem ændringer" /> </form>... I den anvendte overload tager Html.Select imod Id Listen, der skal displayes Det valgte elements key februar 2008 ASP.NET MVC Framework 47
48 Tilføj opret funktionalitet (1) Controller action en DetailsEdit tilrettes, så input parameteren id bliver nullable [ControllerAction] public void DetailsEdit (System.Guid? id) WorkRegistrationEditViewData wredit = new WorkRegistrationEditViewData(); if (id.hasvalue) wredit.wr = // Hent WorkRegistration objekt fra modellen wredit.employees = // Hent alle Employees wredit.projects = // Hent alle Projects RenderView("DetailsEdit", wredit); Wr-property på ViewData sættes til null, hvis det drejer sig om oprettelse af ny WorkRegistration februar 2008 ASP.NET MVC Framework 48
49 Tilføj opret funktionalitet (2) For at lette koden i viewets ascx-template oprettes en IsNew property i code behind public partial class DetailsEdit : ViewPage<WorkRegistrationEditViewData> protected bool IsNew; public void Page_Load() IsNew = (ViewData.Wr == null); Udsnit af viewets ascx-template Der sættes tomme strenge ind i input, hvis det er opret: if (IsNew) <h2>opret ny timeregistrering</h2> else <h2>rediger timeregistrering</h2> <form action="/registrations/updatedetails/ = (IsNew)? "" : ViewData.Wr.WorkRegistrationId.ToString() " method="post"> Dato: = Html.TextBox("Date", (IsNew)? "" : ViewData.Wr.Date.ToShortDateString()) <br />... februar 2008 ASP.NET MVC Framework 49
50 Tilføj opret funktionalitet (3) Update action tilrettes, så den kan håndtere opret [ControllerAction] public void UpdateDetails(System.Guid? id, System.DateTime date, int timespaninminutes, string title, string description) WorkRegistration wr; if (id.hasvalue) wr = // Hent eksisterende objekt fra modellen else wr = new Model1.WorkRegistration(); wr.workregistrationid = System.Guid.NewGuid(); wr.date = date.date; wr.timespaninminutes = timespaninminutes; wr.employee = // Hent employee fra modellen ud fra id wr.project = // Hent project fra modellen ud fra id wr.title = title; wr.description = description; // Gem objekt i modellen RedirectToAction("Employees"); februar 2008 ASP.NET MVC Framework 50
51 Simplificer update action anvend UpdateFrom(Request.Form) Mapper form-parametre direkte ind på model objekt [ControllerAction] public void UpdateDetails(System.Guid? id) WorkRegistration wr; if (id.hasvalue) wr = // hent eksisterende objekt fra model else wr = new Model1.WorkRegistration(); wr.workregistrationid = System.Guid.NewGuid(); wr.updatefrom(request.form); // Hack - det ser ikke ud til at referencer håndteres af UpdateFrom // det må være en fejl i den nuværende version wr.employee = // Hent employee ud fra key fra // new System.Guid(Request.Form["employeeId"])); wr.project = // Hent på tilsvarende vis project // Gem objekt i modellen og foretag en redirect... februar 2008 ASP.NET MVC Framework 51
52 ASP.NET MVC Framework MVC Framework er et alternativ til web forms Ikke en afløser! MVC har klare styrker så længe, det drejer sig om visning af data JavaScript, CSS m.v. bliver lettere tilgængelig, når sideopbygning er simplere (simplere ID er m.v.) Den klare opdeling mellem forretningslogik og UI-del Web forms har klart fordele (endnu i hvert tilfælde) når det kommer til redigering og kompleks brugerinteraktion februar 2008 ASP.NET MVC Framework 52
53 Spørgsmål nyheder, artikler, information,... februar 2008 ASP.NET MVC Framework 53
Tjek den nye ASP.NET-platform - ASP.NET Model View Controller (MVC) Framework
Tjek den nye ASP.NET-platform - ASP.NET Model View Controller (MVC) Framework Foredrag for SAM-DATA marts 2010 Captator Tlf: 8620 4242 www.captator.dk Carsten Juel Andersen Softwarearkitekt [email protected]
Umbraco installationsvejledning
på et ScanNet ASP Webhotel Indledning Beskrivelse Denne vejledning vil indeholde installation af CMS systemet Umbraco på et ASP Webhotel. Det dansk grundlagt Content Management System (CMS) Umbraco er
ASP.NET MVC En Dansk e-bog.
ASP.NET MVC En Dansk e-bog. Over de sidste mange uger har 4 forskellige personer i det Danske udvikler community forsøgt så godt de kunne, at skrive et eller flere kapitler til en e-bog om et nyt web framework
Tredjepart webservices
Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output
Procesbeskrivelse - Webprogrammering
Procesbeskrivelse - Webprogrammering Indholdsfortegnelse Forudsætninger... 1 Konceptet... 2 Hjemmesiden... 2 Server-side... 3 Filstrukturen... 3 Databasehåndtering og serverforbindelse... 4 Client-side...
PHP 3 UGERS FORLØB PHP, MYSQL & SQL
PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at
Kom i gang med SAS STPbaserede
make connections share ideas be inspired Kom i gang med SAS STPbaserede webapplikationer Lars L. Andersson Chefkonsulent Webapplikationer Interaktion med serverbaserede data via skærmbilleder leveret gennem
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Sådan kan du sende data fra din egen hjemmeside til JitBesked via en HTML-JDF.
Sådan kan du sende data fra din egen hjemmeside til JitBesked via en HTML-JDF. Vejledningen her beskriver hvordan man opbygger en form i HTML og sender indholdet af felterne til JitBesked. Det kræver du
Dokumentation. Udbyder : sms1919.dk Service : sms-grupper Static FBML Facebook. : Facebook Integration med sms-grupper.
Dokumentation Udbyder : sms1919.dk Service : sms-grupper Static FBML Facebook Moduler Påkrævet : Facebook Integration med sms-grupper Version : v1.00 Indholdsfortegnelse Versionshistorik... 3 Målet med
Databaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
Web- og serverprogrammering
Web- og serverprogrammering Arkitekturer i webprogrammer - dag 6 Model-View-Controller-arkitukturen Flerlags-arkitekturer Læsning: WJSP 10 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html
Plotning og MicroStation V8i. Frank Møller Christensen
Plotning og MicroStation V8i Frank Møller Christensen bentleyuser.dk årsmøde 09.11.2009 Plotning og MicroStation V8i Nyheder 27/12/2009 2 Nyheder - Georeferenced PDF - Property Publishing. - Dynamic Plot
Software Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Vejledning til Retsinformation web services test stubs
Civilstyrelsen Vejledning til Retsinformation Version:2 2010.02.08 Indholdsfortegnelse 1. Introduktion... 3 2. Installation... 3 3. Web Service beskrivelse og testdata... 3 2010.02.08 2 Side 2 af 5 1.
Udvikling af DOTNET applikationer til MicroStation i C#
Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt
1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5
INDHOLD 1 Domæne 2 1.1 Design valg.................................... 2 1.1.1 User.................................... 2 2 Klassediagran 5 3 Serbio 7 3.1 Kommunikation..................................
My booking. Generelt. Forsiden. Version 9.0
My booking Version 9.0 System til at lave online bookinger, med mulighed for opdeling i grupper, forskellige booking typer, ændre layout indstillinger, status styring, sprogvalg samt en del mere, detaljer
PHP Snippets. De små korte. Skrevet af Daniel Pedersen
PHP Snippets De små korte Skrevet af Daniel Pedersen Indhold PHP Snippets De små korte er en samling af små og praktiske kode eksempler med kort forklaring, som med formål at kunne benyttes til opsalgsværk
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Brugervejledning til Design Manager Version 1.02
Brugervejledning til Design Manager Version 1.02 Indholdsfortegnelse 1. Introduktion... 3 1.1 Det kan du med HostedShop Design Manager... 3 1.2 Feature list... 3 2. Design... 4 3. Filer og CSS... 4 3.1
Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere
Integrationsmanual Anvendelse af webservice til kursusoversigt i Campus Brugervejledning til udviklere Moderniseringsstyrelsen Webservice manual til udviklere 2016 1 1. Indholdsfortegnelse Nyt kapitel
Arkitektur for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Arkitektur for begyndere Denne artikel beskriver forskellige basale n-tier arkitekturer. Som man bør kende og have valgt inden man går igang med at udvikle
Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere
Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Dokument version: 2.0 ADS version: 1.0 Henvendelse vedrørende affald: Miljøstyrelsen Roskilde, Affaldssekretariatet
PHP kode til hjemmeside menu.
PHP kode til hjemmeside menu. Home Hovedmenu 1 Hovedmenu 2 Hovedmenu 3 Hovedmenu 4 Undermenu 1 Breadcrumb Her vises indholdet af den valgte side Undermenu 2 Undermenu 3 Undermenu 4 Evt. en mulighed for
Ressourcekatalog. Christian Glantz. Kongens Lyngby 2010 IMM-B.Eng-2010-25
Ressourcekatalog Christian Glantz Kongens Lyngby 2010 IMM-B.Eng-2010-25 Technical University of Denmark Informatics and Mathematical Modelling Building 321, DK-2800 Kongens Lyngby, Denmark Phone +45 45253351,
Eksempel: et ordresystem note 5 Lagdeling s. 1
Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordre-system NiceHair er et firma, som sælger udstyr, inventar og frisørartikler til frisørsaloner over hele landet. Det er ejet af et ægtepar
Adgang til kundeportalen
Til elleverandørerne Adgang til kundeportalen 3. april 2012 XSTJ/LRO Følgende dokument har til formål at orientere elleverandørerne om implementering og testning af den it-funktionalitet, som skal sikre
EasyIQ Opdatering 5.2.3 -> 5.4.0
EasyIQ Opdatering 5.2.3 -> 5.4.0 Kunde: Forfatter: Thomas W. Yde Systemtech A/S Side: 1 af 17 1 Indholdsfortegnelse 2 GENERELT OMKRING FORUDSÆTNINGEN OG OPDATERINGS FORLØBET... 3 2.1 FORUDSÆTNINGER...
MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &.
MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1 MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2 Program Hurtig
FMK-online's brug af SmartFraming
Side 1 af 9 FMK-online's brug af SmartFraming Version 1.1 2011-11-01 Side 2 af 9 Indholdsfortegnelse Indledning...3 Initialisering og login...3 Kontekst Properties...4 user.id.authorizationid...4 userorganization.id.number...4
ADMINISTRATIONS MANUAL
ADMINISTRATIONS MANUAL onmap.dk Administrations Manual Dansk Version 0.1 Side 1 Denne manual beskrive hvordan en race administrator kan opsætte og bruge onmap.dk race protalen til at lave en specialiseret
PID2000 Archive Service
PROLON CONTROL SYSTEMS Herstedvesterstræde 56 DK-2620 Albertslund Danmark Tlf.: (+45) 43620625 Fax: (+45) 43623125 PID2000 Archive Service Bruger vejledning Juni 2002 Denne manual beskriver brugen af softwaren
METODER ARV KLASSER. Grundlæggende programmering Lektion 5
METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen
Et subsite i Umbraco
Et subsite i Umbraco Agenda Hvad er Umbraco Login i CMS Gennemgang af CMS Opret et forløb Workshop Hvad er Umbraco Umbraco er et Dansk Content Management System (CMS). Det benyttes bl.a. Af Wired, Heinz,
Interaktionsudvikling
Projektopgave 3: Interaktionsudvikling CPH business, klasse: MulA2013 Projektansvarlige undervisere Thomas Hartmann MereteGeldermann lützen: Projekt produkt url: www.amalieardahl.dk/projekt3/index.html
Who s to blame? Jeppe Rørbæk. [email protected] +45 22 70 55 07. Konsulent og underviser på Teknologisk Institut MCP, MCAD, MCSD, MCT
Who s to blame? Jeppe Rørbæk [email protected] +45 22 70 55 07 Konsulent og underviser på Teknologisk Institut MCP, MCAD, MCSD, MCT Introduktion til ATLAS AJAX Intro / hensigten med ATLAS Hvordan
Dygtig.NET / C# udvikler med stor erfaring fra både offentlige organisationer og private virksomheder.
.NET UDVIKLER NATIONALITET: DANSK PROFIL Dygtig.NET / C# udvikler med stor erfaring fra både offentlige organisationer og private virksomheder. Stor erfaring omkring databasedesign, datahåndtering og MS
Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)
Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net) Kim Harding Christensen EOS A/S Margrethepladsen 3 8000 Århus TLF: 8732 8787
Ugeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Kursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Systemair Connect. Opsætning
Systemair Connect Opsætning Opsætning af Systemair Connect Denne vejledning er lavet for at hjælpe dig i gang med opsætningen af Systemair Connect. Du kan bl.a. læse om, hvordan du opbygger en understruktur
2. Systemarkitektur... 2
Indholdsfortegnelse 2. Systemarkitektur... 2 2.1 Præsentationsserverarkitektur... 3 2.2 Applikationsserverarkitektur... 7 Version 7.0 Side 1 af 7 5. Systemarkitektur Arkitekturen for Nyt BBR bygger på
Web sider. Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det?
Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det? I dag skal du lære at lave hjemmesider, så du også kan bidrage til at opbygge
Videregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
Vejledning til Teknisk opsætning
Vejledning til Teknisk opsætning v. 1.0 Adm4you, 2010. Indhold Kort om denne vejledning... 3 Generelt om easyourtime... 3 Installation af databasen... 3 Sikkerhed og rettigheder... 4 SQL Login... 4 Rettigheder
GRAFISK PRODUKTION & WORKFLOW. Endotest website
GRAFISK PRODUKTION & WORKFLOW Endotest website DOKUMENTATION OPGAVEN: Endotest ApS ønskede at redesigne deres hjemmeside, så den fremstår mere professionel og enkel. Derudover skal det nye site præsentere
SOSIGW. - Administrationskonsol for SOSIGW 1.0.6. Indeks
SOSIGW - Administrationskonsol for SOSIGW 1.0.6 Indeks Indeks... 1 Revisionshistorik... 2 Introduktion... 2 Administrationskonsollen... 2 Generel brug af konsollen... 3 Fremsøgning af ID-kort... 3 Søgning
FLIS PORTAL GENNEMGANG OG STIKPRØVER (SEPTEMBER 2015)
FLIS PORTAL GENNEMGANG OG STIKPRØVER (SEPTEMBER 2015) INDHOLD 1. FORMÅL OG SCOPE... 1 1.1. TEKNOLOGIER OG RAMMEVÆRKER... 1 2. ARKITEKTUR... 2 2.1. KOMBIT.FLIS.PORTAL... 3 2.2. SCRIPTS... 3 2.3. SHAREPOINT
2. SEMESTER PROJEKT 3 INTERAKTIONSUDVIKLING
2. SEMESTER PROJEKT 3 INTERAKTIONSUDVIKLING Baggrund Udgangspunktet er projekt 2, dvs. en blog om cupcakes, hvor målgruppe, afsender og modtager allerede er defineret. Du bliver nu bedt om at udvikle et
Byggebasen Javascript
EG Data Inform Byggebasen Javascript Implementering af ansvarsperioder og produktdata på eget site Jens Karsø 2013 Indhold Byggebasen javascript-plugin til DB12-site... 2 DB12-site kommunikationsmodel...
Studieordning del 3-2014
Studieordning del 3-2014 Valgfag Datamatiker AP Graduate in Computer Science Version 1.1 Revideret august 2014 Side 0 af 6 del 3 Valgfag 1. Valgfrie uddannelseselementer...2 2. Valgfaget Android...2 3.
Opstart. I gang med Dreamweaver. Læs mere om...
Generelle bemærkninger Programmet Dreamweaver har været på markedet i nogle år efterhånden. Den seneste version hedder Dreamweaver CS6, og programmet er på engelsk. Dreamweaver er en såkaldt grafisk editor,
Den Danske Esri Brugerkonference 2019 What's new in ArcGIS Enterprise og Administration af ArcGIS Enterprise
Den Danske Esri Brugerkonference 2019 What's new in ArcGIS Enterprise og Administration af ArcGIS Enterprise Torben Vidding Willadsen, Geoinfo Agenda Shared instances News! Hvad er ArcGIS Enterprise? (den
Advanced Word Template Brugermanual
Advanced Word Template Brugermanual Forord: Advanced Word Template er et værktøj, der anvendes sammen med Microsoft Word til at opbygge ensartet beskrivelser på en mere intelligent måde end Copy and Paste
Anvendelse af Model- View koncept i SAS Stored Processer
Anvendelse af Model- View koncept i SAS Stored Processer Peter Sandal Boll Chefkonsulent Professional Services, Skanderborg SAS Institute A/S Agenda Model-View-Controller konceptet (MVC) Eksempel med put-rapport
SWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
Installation og Drift. Aplanner for Windows Systemer Version 8.15
Installation og Drift Aplanner for Windows Systemer Version 8.15 Aplanner for Windows løsninger Tekniske forudsætninger Krav vedr. SQL Server SQL Server: SQL Server 2008 Express, SQL Server 2008 R2 eller
Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug
Spørgsmål 1: Objekter Giv en beskrivelse af Objekt-begrebet og deres brug Under eksaminationen forventes du at forklare: Hvad er en type og en variabel? Hvordan erklæres en variabel? Hvad forstås ved en
vejman.dk WMS/WFS dokumentation vmgeoserver.vd.dk Maj 2013 Udgave 2.0
vejman.dk WMS/WFS dokumentation vmgeoserver.vd.dk Maj 2013 Udgave 2.0 Indholdsfortegnelse 1 Indledning... 3 2 WMS generelt... 3 3 WFS generelt... 4 4 WMS/WFS eksterne kald i forskellige formater... 4 5
Administration af subsites BRUGERVEJLEDNING FOR ADMINISTRATOREN
Administration af subsites BRUGERVEJLEDNING FOR ADMINISTRATOREN Indholdsfortegnelse Introduktion... 2 Definitioner... 2 Generelt... 3 Oprettelse af en skabelon... 4 Sidetypeskabeloner... 5 Globale displaymoduler...
