středa 7. ledna 2015

Validace v ASP.NET MVC poprvé a snadno

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; }
}


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>
}

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:

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.




Žádné komentáře:

Okomentovat