Pozrite sa, ako funguje asp-validation-summary

Stránka aktualizovaná :
Dátum vytvorenia strany :

Životné prostredie

Vizuálne štúdio
  • Vizuálne štúdio 2019
Jadro ASP.NET
  • 3.0
  • 3.1

Spočiatku

ASP.NET Existuje spôsob, ako použiť asp-validation-summary ako spôsob, ako zobraziť chyby vstupné ho overovania na obrazovke v core. Nechcel som naozaj pochopiť rozdiel medzi parametrami, ktoré by som mohol špecifikovať, tak som to skontroloval.

Existujú tri možné hodnoty:

  • Žiadny
  • Iba model
  • Všetky

V dôsledku preskúmania, ako každý z týchto rozdielov funguje, výsledok je nasledujúci:

Predpríprava

V súčasnosti sa pripravíme na operáciu. Väčšina z nich sú nadbytočné, takže ak chcete len vidieť výsledky, pozri druhú polovicu článku.

Toto overenie predpokladá, že chcete zaregistrovať používateľa vo formulári, takže vytvoríme model zobrazenia pre používateľa. Dal som rôzne položky, ale obsah nezáleží na ničom, pretože je možné overiť, či existuje aspoň jeden. Skontrolujeme to pomocou datanotu, preto nastavíme atribúty Povinné a StringLength. Ak chcete vidieť rozdiel v správaní, len som dal v extra IsAccepted.

** Modely / UserViewModel **

using System;
using System.ComponentModel.DataAnnotations;

namespace ValidationSummaryTest.Models
{
  public class UserViewModel
  {
    [Required]
    [StringLength(20)]
    public string ID { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    // 省略

    [Required]
    public bool IsAccepted { get; set; }
  }
}

Preskúmať tri hodnoty asp-validation-summary, vytvorte každú akciu. Avšak, pretože asp-validation-summary je zobraziť vedľajší príbeh, obsah každej akcie sú všetky rovnaké kód okrem správ.

Ak IsAccepted nie je začiarknuté, pridávame chybu. Chyba sa pridá do chyby s iným kľúčom ako model a prázdny kľúč.

Ak sa nevyskytnú žiadne chyby, zobrazte úspešnú registračnú správu.

HomeController.cs

public IActionResult ValidateNone() => View();

[HttpPost]
public IActionResult ValidateNone(UserViewModel model)
{
  if (model.IsAccepted == false)
  {
    ModelState.AddModelError("PropertyName1", "プロパティに依存するエラー (None)");
    ModelState.AddModelError("", "空のキーエラー (None)");
  }
  if (ModelState.IsValid == false) return View(model);
  ViewData["Message"] = "正常に登録しました。";
  return View(model);
}

public IActionResult ValidateModelOnly() => View();

[HttpPost]
public IActionResult ValidateModelOnly(UserViewModel model)
{
  if (model.IsAccepted == false)
  {
    ModelState.AddModelError("PropertyName1", "プロパティに依存するエラー (ModelOnly)");
    ModelState.AddModelError("", "空のキーエラー (ModelOnly)");
  }
  if (ModelState.IsValid == false) return View(model);
  ViewData["Message"] = "正常に登録しました。";
  return View(model);
}

public IActionResult ValidateAll() => View();

[HttpPost]
public IActionResult ValidateAll(UserViewModel model)
{
  if (model.IsAccepted == false)
  {
    ModelState.AddModelError("PropertyName1", "プロパティに依存するエラー (All)");
    ModelState.AddModelError("", "空のキーエラー (All)");
  }
  if (ModelState.IsValid == false) return View(model);
  ViewData["Message"] = "正常に登録しました。";
  return View(model);
}

Index.cshtml pridá odkaz na stránku, kde sa každý test vykonáva.

Súbor index.cshtml

@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
  <h1 class="display-4">Welcome</h1>
  <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<ul>
  <li><a asp-action="ValidateNone">ValidateNone</a></li>
  <li><a asp-action="ValidateModelOnly">ValidateModelOnly</a></li>
  <li><a asp-action="ValidateAll">ValidateAll</a></li>
</ul>

Toto je stránka registrácie používateľa na overenie. Ak sa vyskytla chyba, zadajte žiadne pre asp-validation-summary ako parameter na zobrazenie jeho obsahu. Tiež sme dali "Chyba priame ho vstup" veta v div tag, aby zistili, či sa zobrazí predvolené chybové hlásenie.

Iný kód nie je podrobne prerokovaný, pretože je to kód, ktorý bol automaticky generovaný lešenia na základe modelu. (Niektoré z nich boli stanovené ručne, ale to nemá nič spoločného s týmto overením.)

V blízkosti každého vstupného poľa (vstupná značka) sa nachádza značka meracieho rozsahu s atribútom asp-validation-for nastaveným v blízkosti každého vstupného poľa (vstupná značka). Toto je značka (atribút) na zobrazenie chybových hlásení pre každé vstupné pole. Bez ohľadu na parameter zadaný v asp-validation-summary, chybové hlásenie sa vždy zobrazí v tomto umiestnení, ak sa vyskytla chyba.

Tiež asp-validation-summary zobrazí výsledky overenia servera, takže proces overenia klienta (_ValidationScriptsPartial) komentáre von.

Súbor ValidateNone.cshtml

@model ValidationSummaryTest.Models.UserViewModel

@{
  ViewData["Title"] = "ValidateNone";
}

<h1>ValidateNone</h1>

<h4>UserViewModel</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="ValidateNone">
    
      <div asp-validation-summary="None" class="text-danger">エラー直接入力</div>
      
      <div class="form-group">
        <label asp-for="ID" class="control-label"></label>
        <input asp-for="ID" class="form-control" />
        <span asp-validation-for="ID" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Name" class="control-label"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
      </div>
      
      @* 省略 *@
      
      <div class="form-group form-check">
        <label class="form-check-label">
          <input class="form-check-input" asp-for="IsAccepted" /> @Html.DisplayNameFor(model => model.IsAccepted)
        </label>
      </div>
      <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
      </div>
    </form>
  </div>
</div>

<div>
  <a asp-action="Index">Back to List</a>
</div>

@* サーバーのエラーを表示したいのでコメントアウト *@
@*@section Scripts {
  @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}*@

Stránky ValidateModelOnly.cshtml sú iba v prípade, že zadáte ModelOnly pre asp-validation-summary. Zobrazovaný text je rovnaký ako ValidateNone.cshtml peeking na.

Súbor ValidateModelOnly.cshtml

@model ValidationSummaryTest.Models.UserViewModel

@{
  ViewData["Title"] = "ValidateModelOnly";
}

<h1>ValidateModelOnly</h1>

<h4>UserViewModel</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="ValidateModelOnly">
      <div asp-validation-summary="ModelOnly" class="text-danger">エラー直接入力</div>
      
      @* 省略 *@

    </form>
  </div>
</div>

@* 省略 *@

ValidateAll.cshtml stránky sú takmer identické s výnimkou zadať všetky asp-validation-summary.

Súbor ValidateAll.cshtml

@model ValidationSummaryTest.Models.UserViewModel

@{
  ViewData["Title"] = "ValidateAll";
}

<h1>ValidateAll</h1>

<h4>UserViewModel</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="ValidateAll">
      <div asp-validation-summary="All" class="text-danger">エラー直接入力</div>
    </form>

    @* 省略 *@
  </div>
</div>

@* 省略 *@

Skontrolujte operáciu

Žiadny

Po vytvorení programu sa pokúste skontrolovať operáciu. asp-validation-summary=Žiadna obrazovka.

Keďže v počiatočnom stave zobrazenia sa zobrazuje "Priamy vstup chyby", nezdá sa, že by sa mohol použiť ako predvolené chybové hlásenie. Existujú parametre, ktoré boli nastavené na povinné, takže poďme pokračovať v procese aktualizácie.

Ako názov Žiadne, nič sa zobrazí, ak je chyba. Predvolené chybové hlásenie zostáva neporušené, takže je nepravdepodobné, že je pravdepodobné, že možnosť nastaviť žiadne priamo a používať ho. Ak máte možnosť ju použiť, chcete dynamicky nastaviť hodnotu asp-validation-summary a žiadny, ak nechcete zobraziť chybu?

Iba model

Asp-validation-summary= Obrazovka sModelOnly. Myslím si, že existuje veľa použitie scény najviac, pretože to vyjde vo vzorke overovacej chyby a lešenia.

Vzhľadom k tomu, text "Chyba priamy vstup", ktorý bol umiestnený v div tag nie je zobrazená, zdá sa, že nie je žiadny problém, aj keď si ju.

Je to stav, v ktorom sa vykonáva proces registrácie a zobrazí sa chyba. Jediné správy zobrazené tu sú predvolené správy, ktoré boli predtým umiestnené v div tag a chybové hlásenia, ktoré sa vyskytli na strane servera. Všimnite si však, že ak nemáte prázdne kľúčové správy na strane servera, správa v div tag sa nezobrazí.

Na strane servera sa uvádzajú dve chybové hlásenia, ale zobrazí sa len chyba s prázdnymi znakmi v kľúči. Ak zadáte kľúč, bude sa považovať za chybu vo vlastnosti modelu s týmto názvom, takže sa nezobrazí v asp-validation-summary. Namiesto toho sa zobrazí hlásenie na ľubovoľnej značke s atribútom asp-validation-for s rovnakým názvom.

Všetky

Asp-validation-summary=Všetko je zadané na obrazovke.

Z nejakého dôvodu sa zobrazí text vloženého "priameho vstupu chyby". Nie som si istý, prečo nevidím ModelOnly sám. Zdá sa, že vkladanie nemožno použiť vo všetkom v súčasnosti.

Je to obrazovka po procese aktualizácie sa vykonáva tak, ako to je. Chybové hlásenia pre všetky vstupné polia (vlastnosti) sa zobrazujú v zozname. Každé vstupné pole tiež zobrazí chybové hlásenie, takže ak chcete zadať všetky zhrnúť chybu, Bolo by lepšie odstrániť asp-validation-for atribút nastavený pre každé vstupné pole.

Zobrazia sa aj chybové hlásenia pridané na strane servera. Môžete tiež vidieť, že ste tiež zobrazenie chyby s kľúčom.

Zhrnutie

Asp-validácia-zhrnutie mal tri parametre. Možno budete chcieť použiť ModelOnly, aby bolo ľahšie pochopiť, kde je chyba, alebo na odstránenie duplikácie. Všimnite si, že jediná správa zobrazená v asp-validation-summary je správa s prázdnym kľúčom.

Mimochodom, do prázdneho klávesu môžete pridať ľubovoľný počet správ, takže na zobrazenie viacerých správ nemusíte kombinovať reťazce.

Ak chcete zhromažďovať chybové hlásenia na jednom mieste, pre všetky, V prípade žiadne, nastavte dynamicky, keď nechcete, aby sa chybové hlásenie zobrazovalo z akéhokoľvek dôvodu. Je dobré ho použiť na účely.