<= Tilbake

Formattering med annoteringer

Den enkleste måten for oss å tvinge fødselsdato-feltet til å vises uten klokkeslett er å annotere feltet i PersonModel:

[DataType(DataType.Date)]
public DateTime? DateOfBirth { get; set; }
Det finnes mange andre datatyper vi kan benytte oss av, feks CreditCard, EmailAddress eller Currency. Disse gjør ikke validering, kun formattering av visningen.

For enkelhets skyld setter vi fødselsdatoen i Show-metoden på PersonController

public ActionResult Show(int id = 1)
{
	var model = new PersonModel(id, "Nils", "Jensen", "9161166")
	{
		DateOfBirth = new DateTime(1987,06,06)
	};

	return View(model);
}
slik at vi slipper å fylle ut skjemaet hver gang.
Vi bygger på nytt og går til /Person/Show.

Klokkeslettet vises fremdeles, hvorfor det?
I Show.cshtml spytter vi bare ut C#-verdien. Vi kunne skrevet @Model.DateOfBirth.Value.ToShortDateString() men det er dumt av to grunner:

Løsningen er å bruke en Html helper for visningen:

@Html.DisplayFor(m => m.DateOfBirth)
Det er ansett som beste praksis å alltid bruke denne hjelperen for å vise datafelter fra modellen.

Imens vi er igang innser vi at det er dumt å hardkode navnene også, vi vil heller bruke navnene fra modellen:

@Html.DisplayNameFor(m => m.DateOfBirth)

Show.cshtml ser nå slik ut:

@model MVCintro.Models.PersonModel

<h2>Person</h2>
<p>@Html.DisplayNameFor(m => m.Id): @Html.DisplayFor(m => m.Id)</p>
<p>@Html.DisplayNameFor(m => m.FirstName): @Html.DisplayFor(m => m.FirstName)</p>
<p>@Html.DisplayNameFor(m => m.LastName): @Html.DisplayFor(m => m.LastName)</p>
<p>@Html.DisplayNameFor(m => m.PhoneNumber): @Html.DisplayFor(m => m.PhoneNumber)</p>
<p>@Html.DisplayNameFor(m => m.IdentityNumber): @Html.DisplayFor(m => m.IdentityNumber)</p>
<p>@Html.DisplayNameFor(m => m.DateOfBirth): @Html.DisplayFor(m => m.DateOfBirth)</p>
<p>@Html.DisplayNameFor(m => m.EmailAddress): @Html.DisplayFor(m => m.EmailAddress)<</p>
Vi refresher skjermbildet og verifiserer at det virker.


<= Tilbake