TOC

This article has been localized into Hungarian by the community.

A special thanks goes out to user #2366 for the Hungarian translation of this article: Tamás Bischof

Modellek:

Modellhitelesítés

Az előző cikkben a DataAnnotationökről beszéltünk, és arról, hogyan segítik ezek a modelljeidet a nézetekkel való szorosabb együttműködésben. Sok DataAnnotation valójában közvetlen az ASP.NET MVC keretrendszer bevitelhitelesítési mechanizmusait segíti. Lehetővé teszi bizonyos szabályok alkalmazását tulajdonságokra, amiket figyelembe véve a nézeteid és vezérlőid megállapíthatják, hogy egy bizonyos modell jelenlegi állapota megengedett-e (például egy űrlap beküldése esetén).

Alapvető hitelesítés hozzáadása

A hitelesítési szabályokat DataAnnotationökön keresztül érhetjük el, amiknek tulajdonságra való alkalmazását már az előző cikkben láthattuk. Több lehetőség közül választhatunk, egyelőre csak párat teszünk az előzőleg bemutatott WebUser osztályhoz:

public class WebUser  
{  
    [Required]
    [StringLength(25)]
    public string FirstName { get; set; }

    [Required]
    [StringLength(50, MinimumLength = 3)]
    public string LastName { get; set; }

    [Required]
    [EmailAddress]
    public string MailAddress { get; set; }
}

Mindhárom tulajdonság DataAnnotationnel lett megjelölve, ami hasznos információt ad a keretrendszer számára az adatellenőrzés végrehajtása során. Mindegyik tulajdonság meg lett jelölve a [Required] attribútummal, ami annyit tesz, hogy kötelező, hogy a tulajdonságnak értéke legyen - nem lehet NULL. Használtuk emellett a [StringLength] attribútumot a stringek maximum, és egy esetben minimum hossza megszabására. Ezek különösen fontosak ha a modelled egy adatbázis táblázatához kapcsolódik, ahol a stringek gyakran maximális hosszal vannak definiálva. Az utolsó tulajdonságot a [EmailAddress] attribútummal illettük, ami biztosítja, hogy a megadott érték e-mail címként néz ki.

A fentiek ellenőrzésére szükségünk lesz egy egyszerű űrlapra. Ahogy egy előző cikkben már bemutattam, modellkötést használunk a megfelelő beviteli mezők generálására:

@model HelloMVCWorld.Models.WebUser
@using(var form = Html.BeginForm())
{
    <div>
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
    </div>

    <div>
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)
    </div>

    <div>
@Html.LabelFor(m => m.MailAddress)
@Html.TextBoxFor(m => m.MailAddress)
    </div>

    <input type="submit" value="Submit" />
}

Már csak egy vezérlőre van szükségünk, ami a nézetet visszaadja nekünk, és ami az űrlap visszaérkeztekor POST kéréseket is fel tud dolgozni:

public class ValidationController : Controller
{
    [HttpGet]
    public IActionResult SimpleValidation()
    {
return View();
    }

    [HttpPost]
    public IActionResult SimpleValidation(WebUser webUser)
    {
if(ModelState.IsValid)
    return Content("Thank you!");
else
    return Content("Model could not be validated!");
    }

}

Az érdekes része ennek a POST akció, ahol a ModelState objektum IsValid tulajdonságát ellenőrizzük (tehát hogy valós-e a modell jelenlegi állapota). Az űrlapban megadott adatok alapján ez lehet igaz, vagy hamis, a modellben (WebUser) előzőleg megszabott szabályok alapján. Ezzel most már megakadályozhatjuk, hogy a modell hibás állapotban kerüljön feldolgozásra, például egy adatbázisban.

Hitelesítési hibaüzenetek megjelenítése

A fenti példában ellenőrizni tudtuk, hogy a modell helyes-e vagy sem, a modellhez adott hitelesítési szabályoknak köszönhetően. De ez persze még hasznosabb lenne, ha a felhasználóval is tudnánk kommunikálni ezeket a problémákat, hogy aztán kijavíthassa azokat. Szerencsénkre ez nagyon is egyszerű!

Először is ki kell terjesszük az űrlapot, hogy az meg tudjon jeleníteni hibaüzeneteket a felhasználónak. Ezt egy újabb segédmetódus segítségével tehetjük meg, amit a Html objektumon találhatunk meg: a ValidationMessageFor() metódussal. Ez egy, a beviteli mezőhöz kapcsolódó hibaüzenetet jelenít meg, ha van ilyen - különben semmit. Itt az űrlapunk bővített verziója:

@model HelloMVCWorld.Models.WebUser
@using(var form = Html.BeginForm())
{
    <div>
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
@Html.ValidationMessageFor(m => m.FirstName)
    </div>

    <div>
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)
@Html.ValidationMessageFor(m => m.LastName)
    </div>

    <div>
@Html.LabelFor(m => m.MailAddress)
@Html.TextBoxFor(m => m.MailAddress)
@Html.ValidationMessageFor(m => m.MailAddress)
    </div>

    <input type="submit" value="Submit" />
}

Meg kell bizonyosodnunk afelől is, hogy amikor az űrlapot hibásan kapjuk meg, akkor azt a felhasználónak újra visszaadjuk, hogy az láthassa és javíthassa a hibákat. Ezt a vezérlőben tesszük meg, azáltal, hogy visszaadjuk a nézetet és a jelenlegi modellállapotot, ha hitelesítési hibába futunk:

[HttpPost]
public IActionResult SimpleValidation(WebUser webUser)
{
    if(ModelState.IsValid)
return Content("Thank you!");
    else
return View(webUser);
}

Most hogy ez kész, próbáld meg üres mezőkkel beadni az űrlapot. Rögtön ismét az űrlapon fogod találni magad, de a mezők mellett hibaüzenetek jelennek meg, a [Required] attribútumnak köszönhetően:

Ha az űrlapot olyan értékkel adod be, ami nem felel meg a StringLength követelményeknek, akkor szintén egy külön generált üzenettel fogsz találkozni. Ha például olyan LastName értéket adsz meg, ami túl rövid vagy túl hosszú, akkor ezt az hibaüzenetet kapod:

The field LastName must be a string with a minimum length of 3 and a maximum length of 50.

De mi van, ha több irányítást szeretnél a megjelenő üzenetek felett? Semmi gond, közvetlen a modell DataAnnotationjeiben felülírhatod azokat. Itt a modellünk egy verziója, ahol saját hibaüzeneteket adtunk meg:

public class WebUser  
{  
    [Required(ErrorMessage = "You must enter a value for the First Name field!")]  
    [StringLength(25, ErrorMessage = "The First Name must be no longer than 25 characters!")]  
    public string FirstName { get; set; }  

    [Required(ErrorMessage = "You must enter a value for the Last Name field!")]  
    [StringLength(50, MinimumLength = 3, ErrorMessage = "The Last Name must be between 3 and 50 characters long!")]  
    public string LastName { get; set; }  

    [Required(ErrorMessage = "You must enter a value for the Mail Address field!")]  
    [EmailAddress(ErrorMessage = "Please enter a valid e-mail address!")]  
    public string MailAddress { get; set; }  
}

Mint láthatod, könnyedén írhatsz saját hibaüzeneteket!

Hitelesítési összesítés megjelenítése

Nagy segítség lehet egy közvetlen a beviteli mezőhöz tartozó hibaüzenet, különösen, ha nagyobb űrlapod van. Kisebbek esetén, mint amilyen a példánk is, hasznosabb lehet viszont egy összesítést megjeleníteni, akár a mezők alatt vagy fölött. Ezt a Html segédobjektumon található ValidationSummary() metódussal érhetjük el:

@model HelloMVCWorld.Models.WebUser
@using(var form = Html.BeginForm())
{
    @Html.ValidationSummary()
   
    <div>
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)        
    </div>

    <div>
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)        
    </div>

    <div>
@Html.LabelFor(m => m.MailAddress)
@Html.TextBoxFor(m => m.MailAddress)        
    </div>

    <input type="submit" value="Submit" />
}

Így amikor az űrlapot hitelesítési hibákkal küldik be, így fog kinézni:

Természetesen ha szeretnéd, szabadon keverheted a mezőnkénti hibaüzeneteket az összesítéssel.

Összefoglalás

Alapvető modellhitelesítést nem csak könnyű megvalósítani de biztosítja azt is, hogy a felhasználó által megadott információ egyezik az általad támasztott elvárásokkal. Ahogy azt már említettem, ez csak egy pár lehetséges módja az adatellenőrzésnek az ASP.NET MVC keretrendszerben. A következő cikkben többet is megismerünk majd!

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!