Validace v ASP.NET MVC je prý snadná - stačí ve ViewModelu použít příslušné atributy a je to - hned se provádí klientská i serverová aplikace. Jenže praxe až tak snadná není. Pokusím se popsat vývoj jedné malé aplikace.
První zadání
Původní zadání bylo docela snadné - udělat aplikaci pro ukládání adres zákazníků. To není žádný obtížný úkol, adresa má následující části:
- Ulice povinné
- Město povinné
- Okres nepovinné
- Stát výběr z dropdownu
- ZIP kód povinný, má tvar NNNNN a nebo NNNNN-NNNN(NN)
Dalším rozborem se dospěje k následujícímu view modelu:
public class AddressViewModel
{
[Display(Name = "Street")]
[Required(ErrorMessage = "The value is required")]
public string Line1 { get; set; }
public string Line2 { get; set; }
[Display(Name = "City")]
[Required(ErrorMessage = "The value is required")]
public string City { get; set; }
[Display(Name = "County")]
public string County { get; set; }
[Display(Name = "State")]
public string StateCode { get; set; }
[Display(Name = "Zip Code")]
[Required(ErrorMessage = "The value is required")]
[RegularExpression(@"^\d{5}(-(\d{4}|\d{6}))?$", ErrorMessage ="Please provide valid zip code.")]
public string ZipCode { get; set; }
}
{
[Display(Name = "Street")]
[Required(ErrorMessage = "The value is required")]
public string Line1 { get; set; }
public string Line2 { get; set; }
[Display(Name = "City")]
[Required(ErrorMessage = "The value is required")]
public string City { get; set; }
[Display(Name = "County")]
public string County { get; set; }
[Display(Name = "State")]
public string StateCode { get; set; }
[Display(Name = "Zip Code")]
[Required(ErrorMessage = "The value is required")]
[RegularExpression(@"^\d{5}(-(\d{4}|\d{6}))?$", ErrorMessage ="Please provide valid zip code.")]
public string ZipCode { get; set; }
}
Ani view není příliš komplikované:
@using (Html.BeginForm("Save", "Contact"))
{
<div class="addressForm">
<div class="row">
<div class="label">@Html.LabelFor(m => m.Line1)</div>
<div class="input">
@Html.TextBoxFor(m => m.Line1)
@Html.TextBoxFor(m => m.Line2)
@Html.ValidationMessageFor(m => m.Line1)
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.City)</div>
<div class="input">
@Html.TextBoxFor(m => m.City)
@Html.ValidationMessageFor(m => m.City)
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.County)</div>
<div class="input">
@Html.TextBoxFor(m => m.County)
@Html.ValidationMessageFor(m => m.County)
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.StateCode)</div>
<div class="input">
@Html.DropDownListFor(m => m.StateCode, ViewHelper.GetStates(Model != null ? Model.StateCode : string.Empty))
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.ZipCode)</div>
<div class="input">
@Html.TextBoxFor(m => m.ZipCode)
@Html.ValidationMessageFor(m => m.ZipCode)
</div>
</div>
<input type="submit" value="Save" />
</div>
}
{
<div class="addressForm">
<div class="row">
<div class="label">@Html.LabelFor(m => m.Line1)</div>
<div class="input">
@Html.TextBoxFor(m => m.Line1)
@Html.TextBoxFor(m => m.Line2)
@Html.ValidationMessageFor(m => m.Line1)
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.City)</div>
<div class="input">
@Html.TextBoxFor(m => m.City)
@Html.ValidationMessageFor(m => m.City)
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.County)</div>
<div class="input">
@Html.TextBoxFor(m => m.County)
@Html.ValidationMessageFor(m => m.County)
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.StateCode)</div>
<div class="input">
@Html.DropDownListFor(m => m.StateCode, ViewHelper.GetStates(Model != null ? Model.StateCode : string.Empty))
</div>
</div>
<div class="row">
<div class="label">@Html.LabelFor(m => m.ZipCode)</div>
<div class="input">
@Html.TextBoxFor(m => m.ZipCode)
@Html.ValidationMessageFor(m => m.ZipCode)
</div>
</div>
<input type="submit" value="Save" />
</div>
}
Po doplnění kódu se aplikace chová asi tak, jak by očekávalo, tj. uvidíme formulář"
který pokud se jej pokusíme odeslat nevyplněný a nebo se špatnými údaji vypíše chybové hlášení a umožní tak uživateli naší aplikace všechny chyby opravit:
který pokud se jej pokusíme odeslat nevyplněný a nebo se špatnými údaji vypíše chybové hlášení a umožní tak uživateli naší aplikace všechny chyby opravit:
Udělat tedy takovouto validaci není nic těžkého a lze to zvládnout snadno pomocí nástrojů co nabízí MVC.
Ale co v případě, že naší skvělou aplikaci rozšíříme i do České republiky?
O tom bude druhý díl článku.
Co se týče zdrojových kódů, tak je uveřejním pro všechny díly na konci tohoto miniseriálku.
Ale co v případě, že naší skvělou aplikaci rozšíříme i do České republiky?
O tom bude druhý díl článku.
Co se týče zdrojových kódů, tak je uveřejním pro všechny díly na konci tohoto miniseriálku.
Žádné komentáře:
Okomentovat