Podívejte se, jak funguje souhrn ověření asp

Stránky aktualizovány :
Datum vytvoření stránky :

Prostředí

Vizuální studio
  • Visual Studio 2019
ASP.NET jádro
  • 3.0
  • 3.1

Zpočátku

ASP.NET Existuje způsob, jak použít souhrn ověřování asp jako způsob zobrazení chyb ověření vstupu na obrazovce v jádru. Nechápal jsem rozdíl mezi parametry, které jsem mohl specifikovat, tak jsem to zkontroloval.

Existují tři možné hodnoty:

  • Žádný
  • ModelOnly
  • Všechny

V důsledku zkoumání, jak každý z těchto rozdílů funguje, výsledek je následující:

Příprava

Prozatím se připravíme na operaci. Většina z nich je nadbytečná, takže pokud chcete vidět pouze výsledky, podívejte se na druhou polovinu článku.

Toto ověření předpokládá, že chcete zaregistrovat uživatele ve formuláři, takže vytvoříme model zobrazení pro uživatele. Dal jsem různé položky, ale obsah nezáleží na ničem, protože je možné ověřit, zda existuje alespoň jeden. Zkontrolujeme pomocí dataananotation, takže nastavíme atributy Required a StringLength. Chcete-li vidět rozdíl v chování, jen jsem 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; }
  }
}

Chcete-li prozkoumat tři hodnoty souhrnu ověřování asp, vytvořte každou akci. Však vzhledem k tomu, že souhrn asp-validation je článek na straně zobrazení, obsah každé akce jsou všechny stejný kód s výjimkou zpráv.

Pokud isaccepted není zaškrtnutá, přidáváme chybu. Chyba je přidána k chybě s jiným klíčem než model a prázdný klíč.

Pokud nejsou k dispozici žádné chyby, zobrazí se zpráva o úspěšné registraci.

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 přidá odkaz na stránku, kde se provádí každý test.

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 registrační stránka uživatele pro ověření. Pokud dojde k chybě, zadejte None pro souhrn ověření asp jako parametr pro zobrazení jeho obsahu. Do značky div jsme také vložili větu "Error Direct Entry", abychom zjistili, zda se zobrazí výchozí chybová zpráva.

Jiný kód není podrobně popsán, protože je kód, který byl automaticky generován generováním uživatelského rozhraní na základě modelu. (Některé z nich byly stanoveny ručně, ale to nemá nic společného s tímto ověřením.)

V blízkosti každého vstupního pole (vstupní značka) je značka span s atributem asp-validation-for. Toto je značka (atribut) pro zobrazení chybových zpráv pro každé vstupní pole. Bez ohledu na parametr zadaný v souhrnu ověření asp, chybová zpráva se vždy zobrazí v tomto umístění, pokud dojde k chybě.

Souhrn ověření asp také zobrazí výsledky ověření serveru, takže proces ověření klienta (_ValidationScriptsPartial) se zakomentuje.

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");}
}*@

ValidateModelOnly.cshtml stránky jsou pouze v případě, že zadáte ModelOnly pro asp-validation-summary. Zobrazovaný text je stejný jako ValidateNone.cshtml pokukování na.

OvěřitModelOnly.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 jsou téměř identické s výjimkou pro zadání All pro souhrn ověření asp.

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>

@* 省略 *@

Zkontrolujte operaci

Žádný

Po vytvoření programu se pokuste zkontrolovat operaci. asp-validation-summary=Žádná obrazovka.

Vzhledem k tomu, že "Chyba přímý vstup" se zobrazí v počátečním stavu zobrazení, nezdá se být možné použít jako výchozí chybovou zprávu. Existují parametry, které byly nastaveny na Required, takže pokračujme v provádění procesu aktualizace.

Jako název None, nic se zobrazí, pokud dojde k chybě. Výchozí chybová zpráva zůstane beze změny, takže je nepravděpodobné, že by možnost nastavit None přímo a použít. Pokud máte možnost ji použít, chcete dynamicky nastavit hodnotu na souhrn ověřování a ne, pokud nechcete zobrazit chybu?

ModelOnly

Asp-validation-summary= Obrazovka sModelOnly. Myslím, že existuje mnoho použití scény nejvíce, protože to vyjde ve vzorku chyby ověření a lešení.

Vzhledem k tomu, že text "Chyba přímý vstup", který byl umístěn ve div tag není zobrazen, zdá se, že není žádný problém, i když jste ji.

Jedná se o stav, ve kterém je proveden proces registrace a zobrazí se chyba. Zde zobrazené pouze zprávy jsou výchozí zprávy, které byly dříve umístěny do značky div, a chybové zprávy, ke kterým došlo na straně serveru. Všimněte si však, že pokud nemáte prázdnou zprávu klíče na straně serveru, zpráva ve div značky se nezobrazí.

Na straně serveru jsou umístěny dvě chybové zprávy, ale zobrazí se pouze chyba s prázdnými znaky v klíči. Pokud zadáte klíč, bude považován za chybu ve vlastnosti modelu s tímhle názvem, takže se nezobrazí v souhrnu ověření asp. Místo toho se zobrazí zpráva na libovolné značce s atributem asp-validation-for se stejným názvem.

Všechny

Asp-validation-summary=Vše je zadáno na obrazovce.

Z nějakého důvodu se zobrazí text vloženého "přímého vstupu chyby". Nejsem si jistý, proč nevidím ModelOnly sám. Zdá se, že vkládání nelze použít v All v současné době.

Jedná se o obrazovku po provedení procesu aktualizace tak, jak je. Chybové zprávy pro všechna vstupní pole (vlastnosti) jsou zobrazeny v seznamu. Každé vstupní pole také zobrazí chybovou zprávu, takže pokud chcete zadat Vše, co shrnuje chybu, Bylo by lepší odebrat sadu atributů asp-validation-for pro každé vstupní pole.

Zobrazí se také chybové zprávy přidané na straně serveru. Můžete také vidět, že jste také zobrazení chyby s klíčem.

Shrnutí

Souhrn ověřování asp měl tři parametry. Můžete chtít použít ModelOnly usnadnit pochopit, kde je chyba nebo k odstranění duplikace. Všimněte si, že jediná zpráva zobrazená v souhrnu ověření asp je zpráva s prázdným klíčem.

Mimochodem, můžete přidat tolik zpráv, kolik chcete, do prázdného klíče, takže nemusíte kombinovat řetězce, abyste zobrazili více zpráv.

Pro všechny, pokud chcete shromažďovat chybové zprávy na jednom místě, Možnost Žádný nastavte dynamicky, pokud nechcete, aby se z nějakého důvodu zobrazila chybová zpráva. Je dobré ji použít pro účely.