Oglejte si, kako deluje povzetek ASP-validacije

Stran posodobljena :
Datum ustvarjanja strani :

Okolje

Vizualni Studio
  • Vizualni Studio 2019
ASP.NET jedro
  • 3,0
  • 3,1

Sprva

ASP.NET obstaja način za uporabo ASP-Validacija-Povzetek kot način za prikaz vhodnih napak pri validaciji na zaslonu v Core. Jaz didnt ' pošteno razumeti razlika med parametar to jaz strjena lava poseben značaj, tudi jaz kockast to.

Obstajajo tri možne vrednosti:

  • Nobena
  • Samo modelni
  • Vse

Zaradi preučitve, kako vsaka od teh razlik deluje, je rezultat naslednji:

Predpriprava

Za takrat se bomo pripravili na operacijo. Večina od njih so odveč, tako da, če želite le videti rezultate, glej drugo polovico članka.

To preverjanje predpostavlja, da želite registrirati uporabnika v obrazcu, zato bomo ustvarili model pogleda za uporabnika. Sem dal različne elemente, vendar vsebina ni važno ničesar, ker je mogoče preveriti, če obstaja vsaj ena. Preverili bomo z DataAnnotation, zato bomo nastavili atribute Required in StringLength. Če želite videti razliko v vedenju, sem dal v dodatno Issprejeto.

* * Modeli/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; }
  }
}

Če želite pregledati tri vrednosti ASP-validacije-Povzetek, ustvarite vsako dejanje. Vendar, ker ASP-Validacija-Povzetek je pogled stran zgodba, vsebina vsakega ukrepa so vse isto kodo, razen za sporočila.

Če Isuvaževati ni kockast, mi smo seštevanje zmota. Napaka se doda napaki z drugačnim ključem, kot je model, in prazen ključ.

Če ni napak, prikažite uspešno sporočilo o registraciji.

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 dodaja povezavo do strani, kjer se opravi vsak 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>

To je stran za registracijo uporabnika za preverjanje. Če pride do napake, določite brez za asp-validacijo-Povzetek kot parameter za prikaz njegove vsebine. Mi tudi met kamna z napisno tablo "zmota neposreden vstop" stavek v div trakec zagledati če ne izpolniti obveznosti zmota vest je razpoložen.

Druga koda se ne razpravlja podrobno, ker je koda, ki je bila samodejno ustvarjena z odra, ki temelji na modelu. (Nekateri od njih so bile določene z roko, vendar nima nič opraviti s tem preverjanjem.)

Obstaja span tag z ASP-Validacija-za atribut nastavljen v bližini vsakega vnosnega polja (vnosna oznaka). To je oznaka (atribut) za prikazovanje sporočil o napakah za vsako vnosno polje. Ne glede na parameter, naveden v ASP-validaciji-Povzetek, je sporočilo o napaki vedno prikazano na tem mestu, če je prišlo do napake.

Tudi, ASP-proglasitev pravnomočnosti ali pravne veljavnosti-Povzetek izložba pomočnik preveritev rezultat, tudi varovanec proglasitev pravnomočnosti ali pravne veljavnosti proces (_ValidationScriptsPartial) razložiti jasno.

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

Strani ValidateModelOnly. cshtml so samo, če ne podate modelnega samo za asp-validacijo-Povzetek. Zaslonsko besedilo je enako kot validatenone. cshtml kukanja na.

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 strani so skoraj identične, razen za določanje vseh za asp-validacijo-Povzetek.

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>

@* 省略 *@

Preverite delovanje

Nobena

Ko ustvarite program, poskusite preveriti operacijo. ASP-Validacija-Povzetek =brez zaslona.

Ker je» napaka pri neposrednem vnosu «prikazana v začetnem stanju prikaza, se zdi, da se ne more uporabiti kot privzeto sporočilo o napaki. Obstajajo parametri, ki so bili določeni za zahtevano, zato še naprej izvajajte postopek posodabljanja.

Kot ime none, se nič ne prikaže, če je prišlo do napake. Privzeto sporočilo o napaki ostane nedotaknjeno, zato je malo verjetno, da bi ga lahko nastavili neposredno in ga uporabili. Če vi življati a slučaj rabiti to, delati hočeš dinamika število enakih oseb vrednost v ASP-proglasitev pravnomočnosti ali pravne veljavnosti-Povzetek ter nič če vi dont ' biti brez zagledati zmota?

Samo modelni

ASP-Validacija-Povzetek = zaslon zmodelom. Mislim, da obstaja veliko uporabe prizorov najbolj, ker pride ven v vzorcu napake pri preverjanju in odra.

Odkar tekst od "zmota neposreden vložek" to was mesto v div trakec ni razpoložen, videti je to je ne naloga čeravno vi met kamna z napisno tablo to.

To je stanje, v katerem se izvaja postopek registracije, in prikaže se napaka. Edina sporočila, prikazana tukaj, so privzeta sporočila, ki so bila prej postavljena v div tag in sporočila o napakah, ki so se pojavile na strani strežnika. Upoštevajte pa, da če nimate prazen ključ sporočilo na strani strežnika, sporočilo v div tag ne bo pojavil.

Na strani strežnika se prikažejo dve sporočili o napaki, vendar se prikaže samo napaka s praznimi znaki v ključu. Če podate ključ, bo obravnavan kot napaka v lastnosti modela s tem imenom, tako da se ne pojavi v povzetku ASP-validacije. Namesto tega se prikaže sporočilo na katerikoli oznaki z ASP-validacijo-za atribut z istim imenom.

Vse

ASP-Validacija-Povzetek =vse je navedeno na zaslonu.

Iz neznanega razloga se prikaže besedilo vdelanega» neposrednega vnosa napake «. Ne vem, zakaj ne vidim samo modelne samo. Zdi se, da vdelava ni mogoče uporabiti v vse za čas.

To je zaslon, ko se postopek posodabljanja izvede, kot je. Sporočila o napakah za vsa vnosna polja (lastnosti) so prikazana na seznamu. Vsako vnosno polje prikaže tudi sporočilo o napaki, tako da, če želite določiti vse, da povzamemo napako, To domišljavec rajši umakniti ASP-proglasitev pravnomočnosti ali pravne veljavnosti-zakaj attribute število enakih oseb zakaj vsakteri vložek polje.

Prikažejo se tudi sporočila o napakah, dodana na strani strežnika. Vidite lahko tudi, da si ogledujete tudi napako s ključem.

Povzetek

ASP-Validacija-Povzetek je imel tri parametre. Morda boste želeli uporabiti ModelOnly, da bi bilo lažje razumeti, kje je napaka, ali za odpravo podvajanja. Pismo to šele vest razpoložen v ASP-proglasitev pravnomočnosti ali pravne veljavnosti-Povzetek je a vest s puhel zakleniti.

Mimogrede, lahko dodate poljubno število sporočil, kot želite prazen ključ, tako da vam ni treba združiti nizov za prikaz več sporočil.

Za vse, če želite zbrati sporočila o napakah na enem mestu, Za none nastavite dinamično, ko ne želite, da se prikaže sporočilo o napaki iz kakršnega koli razloga. Dobro je, da ga uporabite za namen.