Vaadake, kuidas asp-valideerimise kokkuvõte töötab

Lehekülg uuendatud :
Lehe loomise kuupäev :

Keskkond

3 tärniga
  • Visual Studio 2019
ASP.NET tuum
  • 3.0
  • 3.1

Alguses

ASP.NET On võimalik kasutada asp-valideerimise kokkuvõtet, et kuvada sisendvalideerimise tõrked Core ekraanil. Ma tõesti ei mõista erinevust parameetrid, et ma võiks täpsustada, nii et ma kontrollisin seda.

On kolm võimalikku väärtust:

  • Ükski
  • Ainult mudel
  • Kõik

Selle tulemusena, kuidas kõik need erinevused toimivad, on tulemus järgmine:

Enne ettevalmistamist

Praegu valmistume operatsiooniks. Enamik neist on ülearune, nii et kui sa tahad ainult näha tulemusi, vt teine pool artikkel.

See valideerimine eeldab, et soovite registreerida kasutaja vormi, nii et me loome vaate mudel kasutaja. Panin erinevaid objekte, kuid sisu ei ole oluline midagi, sest see on võimalik kontrollida, kas on olemas vähemalt üks. Me kontrollime DataAnnotation, nii et me määrata Nõutav ja StringLength atribuudid. Et näha erinevust käitumist, ma lihtsalt panna ekstra IsAccepted.

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

Asp-valideerimise kokkuvõtte kolme väärtuse uurimiseks looge iga toiming. Kuna aga asp-valideerimise kokkuvõte on vaate külglugu, on iga toimingu sisu kõik sama koodiga, välja arvatud sõnumite puhul.

Kui isAccepted on märkimata, lisame veateate. Tõrge lisatakse tõrkele, mille võti erineb mudelist ja tühjast võtmest.

Kui tõrkeid pole, kuvage edukas registreerimisteade.

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 lisab lingi lehele, kus iga test on tehtud.

index.cshtml (sihtkoha C-B-ba

@{
    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>

See on kasutaja registreerimise leht kontrollimiseks. Kui esineb tõrge, määrake asp-valideerimise kokkuvõtte jaoks parameetrina selle sisu kuvamiseks pole. Samuti paneme "Error Direct Entry" lause div tag näha, kas vaikimisi tõrketeade kuvatakse.

Muud koodi ei arutata üksikasjalikult, kuna see on kood, mis loodi automaatselt mudeli põhjal tellingute abil. (Mõned neist on käsitsi kinnitatud, kuid sellel pole selle kontrolliga mingit pistmist.)

Iga sisestusvälja (sisendsildi) lähedal on määratud atribuut asp-validation-for (seatud) vahemiku silt. See on silt (atribuut) iga sisestusvälja tõrketeadete kuvamiseks. Sõltumata asp-valideerimise kokkuvõttes määratud parameetrist kuvatakse selles asukohas alati tõrketeade, kui on olemas tõrge.

Samuti kuvatakse asp-valideerimise kokkuvõte serveri kontrollimise tulemused, nii et kliendi valideerimise protsess (_ValidationScriptsPartial) kommenteerib.

Led faili 1999.

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

Lehed ValidateModelOnly.cshtml on ainult juhul, kui määrate modelOnly asp-valideerimise kokkuvõte. Kuvatav tekst on sama, mis ValidateNone.cshtml piilumine.

Led hindeks CBB-2

@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 leheküljed on peaaegu identsed, välja arvatud määrates kõik asp-valideerimise kokkuvõte.

ValidateAll.cshtml (Ümber lükkatud)

@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>

@* 省略 *@

Kontrolli toimingut

Ükski

Pärast programmi loomist proovige toimingut kontrollida. asp- valideerimise kokkuvõte=Puudub ekraan.

Kuna "Error direct input" kuvatakse algses kuvaolekus, ei tundu, et seda saaks kasutada vaikimisi tõrketeade. On parameetreid, mis on seatud nõutav, nii et let's jätkata värskendusprotsessi.

Kui nimi pole, ei kuvata midagi, kui on viga. Vaikimisi veateade jääb puutumata, seega on ebatõenäoline võimalus seada mitte ükski otse ja seda kasutada. Kui teil on võimalus seda kasutada, kas soovite dünaamiliselt määrata väärtuseks asp-valideerimise kokkuvõte ja mitte ühtegi, kui te ei soovi tõrget näha?

Ainult mudel

Asp-validation-summary= EkraanModelOnly. Ma arvan, et seal on palju kasutada stseene kõige, sest see väljub proovi kontrollimise viga ja tellingud.

Kuna teksti "Error otsesisend", mis oli paigutatud div tag ei kuvata, tundub, et ei ole mingit probleemi, isegi kui paned ta.

See on olek, kus registreerimisprotsess viiakse läbi ja kuvatakse tõrge. Siin kuvatakse ainult vaikesõnumid, mis olid varem paigutatud div-sildile ja serveripoolel ilmnenud tõrketeated. Pange tähele, et kui sul ei ole tühi võtme sõnum serveri poolel, ei kuvata div tag sõnumit.

Serveri poolel pannakse kaks veateadet, kuid kuvatakse ainult viga tühjade märkidega. Kui määrate võtme, käsitletakse seda selle nimega mudeli atribuudi tõrkena, nii et seda ei kuvata asp-valideerimise kokkuvõttes. Selle asemel kuvatakse teade mis tahes silt, mille asp-valideerimise atribuut sama nime.

Kõik

Asp-validation-summary= Ekraanil on määratudkõik.

Mingil põhjusel kuvatakse manustatud "tõrke otsesisendi" tekst. Ma ei tea, miks ma ei näe ModelOnly'i üksi. Tundub, et kinnistamine ei saa kasutada Kõik praegu.

See on ekraan pärast värskenduse protsess on tehtud, sest see on. Loendis kuvatakse kõigi sisendväljade (atribuutide) tõrketeated. Igal sisestusväljal kuvatakse ka tõrketeade, nii et kui soovite määrata tõrke summeerimiseks väärtuse Kõik, Parem oleks eemaldada igale sisestusväljale määratud atribuut asp-validation-for.

Kuvatakse ka serveripoolel lisatud tõrketeated. Samuti näete, et vaatate ka viga võtmega.

Kokkuvõte

Asp-valideerimise kokkuvõte oli kolm parameetrit. Võite kasutada ModelOnly'i, et oleks lihtsam mõista, kus tõrge on, või kõrvaldada dubleerimine. Pange tähele, et ainus sõnum kuvatakse asp-valideerimise kokkuvõte on sõnum tühja võtmega.

Muide, saate tühjale võtmele lisada nii palju sõnumeid, kui soovite, nii et te ei pea mitme sõnumi kuvamiseks stringe kombineerima.

Kui soovite tõrketeateid koguda ühes kohas, Pole puhul seadke dünaamiliselt, kui te ei soovi tõrketeadet mingil põhjusel kuvada. On hea kasutada seda eesmärgil.