.NET tanker & tips

.Net, jQuery og andre nørdede emner

Editor templates i ASP.NET MVC

april 07
by steffen 7. april 2014 13:44

Som en naturlig efterfølger til min sidste post om display templates, kommer der her en lille kort blog post om editor templates. 

Display templates bliver brugt til at vise visse typer af data i modellen. Det vil sige at de bruges når man i viewet skriver

@Html.DisplayFor(model => model.SomeProperty)

Hvor SomeProperty har sat UIHint propertyen, der matcher med display templaten. På samme vis fungerer editor templates, men i stedet for at fungere til visning af en værdi, er det til redigere af en værdi. Det vil sige at det bruges når man i viewet skriver:

@Html.EditorFor(model => model.SomeProperty)

Nøglen er igen at man templaten bliver brugt, hvis property'en har sat UIHint attributten.

Display templates skal placeres i en mappe kaldet 'DisplayTemplates', som enten skal ligge i én af view-mapperne som tilhører en bestemt controller eller i Shared mappen under 'Views'. Editor templates fungerer på samme måde. Den eneste forskel er at mappen i stedet - ikke overraskende - skal hedde 'EditorTemplates'.

Et eksempel på at bruges editor templates er en property som holder en DateTime. Hvis man gerne vil bruge en form for javascript datepicker, kan det laves i en editor templates, således at der for alle DateTime properties som har sat UIHint, vil der automatisk blive brugt editor templaten, som sørger for at initialisere datepickeren.

Tags: , ,

ASP.NET MVC

DisplayTemplates i ASP.NET MVC

april 01
by steffen 1. april 2014 16:53

Generelt er ASP.NET MVC et rigtig stærkt framework til hurtigt at opbygge CRUD funktionalitet op imod en domænemodel. Når man tilføjer en controller kan Visual Studio lave action metoder til alle de gængse CRUD operationer. Men alt efter hvor kompleks modellen er, har Visual Studio brug for lidt hjælp til at få det hele med. 

Man kan ofte komme ud for at man har et specielt krav til hvordan en bestemt property i modellen skal vises. Det kan hurtigt udvikle sig til en masse vedligeholdelse i de forskellige views, hvor den samme kode bliver gentaget. Som udviklere bør vi altid forsøge at lave DRY kode. Heldigvis har MVC en måde der nemt kan hjælpe med at centralisere den kode der bruges til at vise en bestemt property/data type. 

Metoden kaldes display templates og er ganske nemt at bruge, hvilket nemt kan illustreres med et lille eksempel. Vi har nedenstående Person klasse:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }

    [UIHint("Int")]
    public int Age { get; set; }
}

Den kvikke læser vil straks have bemærket UIHint attributten på Age property'en - det skal jeg nok vende tilbage til. Hvis vi antager at vi gerne vil have at der står " år gammel" efter alderen (f.eks. 32 år gammel), når vi udskriver Age-property'en til et view, kan det nemt klares. Først oprettes der en ny mappe under "Views -> Shared", som hedder "DisplayTemplates". Man kan også godt placere den under en af mapperne under "Views" som hører til en controller, men så vil Display Templaten kun bruges i denne controllers context.

I den nye DisplayTemplates oprettes der et nyt partial view - lad os kalde det "Age", for tydeligt at vise at det bruges ifm. visningen af Age-property'en. I det nye partial view, skal vi øverst angive hvilken type modellen har, ligesom man også skal i et almindelige strongly typed view. Age er en integer og derfor skriver vi "@model int" i øverste linje. Herefter kan vi skrive alt den markup og Razor, som vi gerne vil have der vises hver gang Age-property'en skal vises.

Dette eksempel er meget simpelt:

@model int
@Model år gammel

Og nu kommer magien - ved at sætte [UIHint("Int")] attributten på en property af typen, vil MVC altid bruge vores lille DisplayTemplate, til at vise værdien. Det vil sige at hver gang vi i et view, som bruger et Person object som model, kalder nedenstående:

@Html.DisplayFor(model => model.Age)

Vil vi få følgende resultat:

X år gammel

Tags: ,

ASP.NET MVC