Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

4. diel - Spracovanie dát a validácie v ASP.NET MVC

V minulej lekcii, Obsluha formulárov v ASP.NET MVC , sme načal spracovanie formulárov a napojenie modelu na pohľad. Jednoduchou kalkulačku dnes v C# .NET tutoriálu dokončíme.

Odoslanie formulára

Pri odoslaní formulára sa nič nestane. Je to z toho dôvodu, že formulár odošle dáta na tú istú stránku. Požiadavka teda zachytí metóda Index () v kontroleru, ktorá vyzerá nasledovne:

public ActionResult Index()
{
    Kalkulacka kalkulacka = new Kalkulacka();
    return View(kalkulacka);
}

Aj po odoslaní formulára sa teda vytvorí nová inštancia kalkulačky, ktorá má nulový výsledok a tá sa nastaví pohľadu. Preto je výsledok stále nula. Situáciu odoslaní formulára na stránku, ktorá ho má spracovať, sa niekedy hovorí PostBack. My by sme práve na túto situáciu potrebovali reagovať iným spôsobom, ako keď užívateľ na stránku len vstúpi bez toho aby niečo odosielal.

Do kontroleru pridáme ďalšiu metódu Index (), tentoraz s parametrom a atribútom HttpPost:

[HttpPost]
public ActionResult Index(Kalkulacka kalkulacka)
{
    if (ModelState.IsValid)
    {
        kalkulacka.Vypocitej();
    }

    return View(kalkulacka);
}

V metóde nám príde inštancie kalkulačky tak, ako bola vytvorená z hodnôt v odoslanom formulári. Ak je model validný, čo zistíme pomocou triedy ModelState, zavoláme metódu výpočtu. Nakoniec vrátime pohľad, ktorému odovzdáme daný model so zadanými hodnotami a výsledkom.

Metóda je označená atribútom [HttpPost]. Tým hovoríme, že si želáme, aby bola spustená len v prípade, že sa odoslal formulár. ASP.NET vždy spúšťa to preťaženie metódy, ktoré sa najviac hodia na danú situáciu. Odoslanie formulára teda už nespadne do prvej metódy Index (), ale až do tej novej.

Aplikáciu môžeme vyskúšať, už sa nám bude zobrazovať výsledok operácie:

Kalkulačka v ASP.NET MVC - Základy ASP.NET MVC

Vyplnená zostanú i ostatné polia, pretože sa hodnota načíta z modelu, ktorý ju má nastavenú z POST.

GET a POST

Patrilo by sa povedať, že okrem metódy POST existuje ešte metóda GET. Obe metódy môžeme použiť na odoslanie údajov našej aplikácii.

Už vieme, že metódou POST sa odosielajú hodnoty z formulára. Dáta sa odošlú vnútri HTTP požiadavky na server. Hoci sa to nemusí vždy striktne dodržiavať, metóda POST slúži hlavne pre vkladanie nových dát.

Metódou GET odovzdávame dáta priamo v URL adrese. Ak by sme ju chceli u nejaké metódy kontroleru vynútiť, môžeme použiť podobne ako u Post atribút [HttpGet].

Urobme si jednoduchý príklad použitia parametra odovzdaného metódou GET. Keby sme napr. Chceli uviesť v URL adrese venovanie, pre koho je kalkulačka vytvorená, vyzerala by URL adresa takto:

http://localhost:50913/Home/Index?jmeno=Karla

Váš port bude samozrejme opäť iný. Aby sme takúto hodnotu načítali, presunieme sa do prvej metódy Index (), ktoré pridáme parameter. Ten vzápätí odovzdáme pomocou ViewBag pohľadu.

public ActionResult Index(string jmeno)
{
    Kalkulacka kalkulacka = new Kalkulacka();
    ViewBag.Jmeno = jmeno;
    return View(kalkulacka);
}

Parameter vypíšeme v pohľade v nadpise H2:

@if (ViewBag.Jmeno != null) {
    <text> pro @ViewBag.Jmeno</text>
}

Ak je parameter Jmeno zadaný (nie je null), vypíšeme do nadpisu ešte pre a obsah parametra. Ak v konštrukcii @if vypisujeme nejaký text, mal by byť obalený v elemente <text>

výsledok:

Kalkulačka v ASP.NET MVC - Základy ASP.NET MVC

Parameter by sme rovnako dobre mohli miesto pohľadu odovzdať modelu, v kalkulačke ma nenapadá žiadne využitie, v aplikácii pre generovanie náhodných čísel by parameter mohol udávať koľko čísel si prajeme vygenerovať.

Už teda vieme odovzdávať dáta skriptu na serveri a to buď v URL adrese pomocou metódy GET alebo v tele HTTP požiadavky pomocou metódy POST. POST používajú najmä formuláre, GET ak chceme, aby sa hodnota zadávala formou odkazu.

Labely

Popisky u polí formulára obsahujú text s názvom vlastnosti, ku ktorej sa viažu. Názvy ako číslo1 však nie sú pre používateľov príliš vábne. Preto k vlastnostiam v triede Kalkulacka pridáme atribúty s ľudskejším popisom:

public class Kalkulacka
{
    [Display(Name = "1. číslo")]
    public double Cislo1 { get; set; }
    [Display(Name = "2. číslo")]
    public double Cislo2 { get; set; }
    public double Vysledek { get; set; }
    [Display(Name = "Operace")]
    public string Operace { get; set; }
    public List<SelectListItem> MozneOperace { get; set; }

    ...

K atribútom je potrebné pridať potrebné USING.

výsledok:

Kalkulačka v ASP.NET MVC - Základy ASP.NET MVC

Validácia

Posledným témou, ktoré si na našej kalkulačke vyskúšame, bude validácia. Určite ste už zistili, že ak nezadáte správny formát, ASP.NET vám formulár nedovolí odoslať.

Validácia v ASP.NET MVC - Základy ASP.NET MVC

Validácia sa generujú automaticky podľa dátového typu danej vlastnosti modelu a sú ako na strane klienta, tak na strane servera.

Ak zadáte neplatný vstup, zachytí ho ešte pred odoslaním na server validátor v JavaScripte. Požiadavka sa teda vôbec neodošle. Pre istotu musí byť tá istá validácie aj na serveri, pretože klient si môže napr. JavaScript vypnúť.

Ukážme si, ako zadať vlastné chybové hlášky k jednotlivým poliam. Navštívime opäť model a k atribútom nad vlastnosťami pridáme ďalšie:

public class Kalkulacka
{
    [Required(ErrorMessage = "Zadejte prosím číslo")]
    [Display(Name = "1. číslo")]
    public int Cislo1 { get; set; }
    [Required(ErrorMessage = "Zadejte prosím číslo")]
    [Display(Name = "2. číslo")]
    public int Cislo2 { get; set; }
    public int Vysledek { get; set; }
    [Display(Name = "Operace")]
    public string Operace { get; set; }
    public List<SelectListItem> MozneOperace { get; set; }

Atribút Required nám umožňuje určiť, že je zadanie pole nutné. Pokiaľ ho používateľ nezadá, vypíše sa daná chybová hláška. Atribút môžeme uviesť aj bez hlášky.

U čísel môžeme ďalej napr. Validovať ich rozsah:

[Range(1, 100, ErrorMessage = "Zadejte prosím číslo od 1 do 100.")]

U reťazcov napr. Ich dĺžku:

např. [StringLength(5)]

Alebo je validovať pomocou regulárnych výrazov

[RegularExpression("\\d+", ErrorMessage = "Neplatný kód")]

Môžete si skúsiť, že sa hlášky naozaj vypíšu.

Validácia v ASP.NET MVC - Základy ASP.NET MVC

Model kalkulačky je teraz plný atribútov a je teda prispôsobený hlavne pre View, preto sa týmto modelom často hovorí ViewModel. Toto označenie by ste mali poznať, ak ste niekedy pracovali s WPF.

To by bolo v našej kalkulačke už všetko. V budúcej lekcii, Úprava template MVC v ASP.NET , začneme niečo zaujímavejšie. Pôjde o osobný blog s administráciou. Zdrojové kódy dnešného projektu máte k stiahnutiu nižšie.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 588x (2.62 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Obsluha formulárov v ASP.NET MVC
Všetky články v sekcii
Základy ASP.NET MVC
Preskočiť článok
(neodporúčame)
Úprava template MVC v ASP.NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity