Katso, miten asp-validointiyhteenveto toimii

Sivu päivitetty :
Sivun luontipäivämäärä :

Ympäristö

Visuaalinen studio
  • Visuaalinen studio 2019
ASP.NET ydin
  • 3.0
  • 3.1

Aluksi

ASP.NET Asp-validation-yhteenvetoa voidaan käyttää keinona näyttää syötteen vahvistusvirheet Coren näytössä. En oikein ymmärrä eroa parametrien välillä, jotka voisin määrittää, joten tarkistin sen.

Mahdollisia arvoja on kolme:

  • Mikään
  • Malli Vain
  • Kaikki

Kunkin erojen toiminnan tutkimisen seurauksena tuloksena on seuraava:

Esivalmistelu

Toistaiseksi valmistaudumme operaatioon. Useimmat niistä ovat tarpeettomia, joten jos haluat vain nähdä tuloksia, katso toinen puoli artikkeli.

Tämä oikeellisuustarkistus edellyttää, että haluat rekisteröidä käyttäjän -lomakkeeseen, joten luomme käyttäjälle näkymämallin. Laitoin erilaisia kohteita, mutta sisältö ei ole väliä mitään, koska se on mahdollista tarkistaa, jos on olemassa vähintään yksi. Tarkistamme DataAnnotation-toiminnolla, joten määritämme Pakolliset- ja StringLength-määritteet. Jotta näkisin käyttäytymisen eron, laitoin vain ylimääräisen isAcceptedin.

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

Jos haluat tarkastella asp-validation-yhteenvedon kolmea arvoa, luo kukin toiminto. Koska asp-validation-yhteenveto on näkymän sivutarina, kunkin toiminnon sisältö on sama koodi viestejä lukuun ottamatta.

Jos IsAccepted-toiminnolla ei ole valittu, lisäämme virheen. Virhe lisätään virheeseen eri avaimella kuin malli ja tyhjä avain.

Jos virheitä ei ole, näytä onnistunut rekisteröintisanoma.

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 lisää linkin sivulle, jossa jokainen testi on tehty.

kävi koulua 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>

Tämä on käyttäjän rekisteröintisivu vahvistusta varten. Jos virhe ilmenee, määritä parametriksi Ei mitään asp-validation-yhteenveto -parametriksi, jos haluat näyttää sen sisällön. Olemme myös laittaa "Error Direct Entry" lause div tag nähdä, jos oletuksena virheilmoitus näkyy.

Muuta koodia ei käsitellä yksityiskohtaisesti, koska se on koodi, joka luotiin automaattisesti rakennustelineet mallin perusteella. (Jotkut niistä on vahvistettu käsin, mutta sillä ei ole mitään tekemistä tämän todentaminen.)

Kunkin syöttökentän (syötetunniste) lähellä on span-tunniste, jonka asp-validation-for-määrite on määritetty. Tämä on tunniste (määrite), jolla näytetään kunkin syöttökentän virhesanomia. Asp-validation-summaryssa määritetystä parametrista riippumatta kyseisessä sijainnissa näkyy aina virhesanoma, jos siinä on virhe.

Asp-validation-yhteenveto näyttää myös palvelimen vahvistustulokset, joten asiakkaan vahvistusprosessi (_ValidationScriptsPartial) kommentoi.

ValidateNone.cshtml (tarkista)

@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-sivut ovat vain, ellet määritä ModelOnly asp-validation-yhteenveto. Näyttöteksti on sama kuin ValidateNone.cshtml-kurkistaminen.

ValidateModelOnly.cshtml (Vahvista MalliVain.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-sivut ovat lähes identtisiä lukuun ottamatta kaikkien määrittämista asp-validation-yhteenvetoa varten.

ValidateAll.cshtml (VahvistaKaikki.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>

@* 省略 *@

Tarkista toiminto

Mikään

Kun olet luonut ohjelman, yritä tarkistaa toiminto. asp-validation-summary=Ei mitään -näyttö.

Koska "Virhe suora syöttö" näkyy alkunäyttötilassa, sitä ei näytä olevan käytettävissä oletusvirhesanomana. On parametreja, joiden arvoksi on määritetty Pakollinen, joten jatketaan päivitysprosessin suorittamista.

Ei mitään -nimenä mitään ei näytetä, jos virhe ilmenee. Oletusvirhesanoma säilyy ennallaan, joten ei todennäköisesti ole mahdollista asettaa Mitään suoraan ja käyttää sitä. Jos sinulla on mahdollisuus käyttää sitä, haluatko dynaamisesti asettaa arvo asp-validation-yhteenveto eikä mitään, jos et halua nähdä virhettä?

Malli Vain

Asp-validation-summary= NäyttöModelOnly. Uskon, että on olemassa paljon käyttöä kohtauksia eniten, koska se tulee ulos näytteen tarkastus virhe ja rakennustelineet.

Koska teksti "Virhe suora syöttö", joka oli sijoitettu div tag ei näy, näyttää siltä, että ei ole ongelma, vaikka laitat sen.

Se on tila, jossa rekisteröintiprosessi suoritetaan ja virhe näytetään. Tässä näkyvät vain oletussanomat, jotka on aiemmin sijoitettu div-tunnisteeseen, ja palvelimen puolella ilmenneet virhesanomat. Huomaa kuitenkin, että jos palvelimen puolella ei ole tyhjää avainviestiä, div-tunnisteen viesti ei tule näkyviin.

Palvelinpuolella on kaksi virhesanomaa, mutta vain näppäimessä näkyy virhe, jossa on tyhjiä merkkejä. Jos määrität avaimen, sitä käsitellään virheenä mallin ominaisuudessa, jolla on sama nimi, joten se ei näy asp-validation-yhteenvedossa. Sen sijaan näyttöön tulee viesti missä tahansa tunnisteessa, jonka asp-validation-for-määrite on sama.

Kaikki

Asp-validation-summary=Kaikki on määritetty näytössä.

Jostain syystä upotetun "virhesuoras syöttö" teksti tulee näkyviin. En ole varma, miksi en näe ModelOnly yksin. Näyttää siltä, että upottaminen ei voi käyttää All toistaiseksi.

Se on näyttö, kun päivitysprosessi on suoritettu sellaisenaan. Kaikkien syöttökenttien (ominaisuuksien) virhesanomat näkyvät luettelossa. Jokaisessa syöttökentässä näkyy myös virhesanoma, joten jos haluat määrittää kaikki, jos haluat tehdä yhteenvedon virheestä, Kullekin syötekentälle on parempi poistaa asp-validation-for attribute-set.

Myös palvelinpuolelle lisätyt virhesanomat tulevat näkyviin. Voit myös nähdä, että tarkastelet myös avaimella olevaa virhettä.

Yhteenveto

Asp-validointi-yhteenveto oli kolme parametria. Voit käyttää ModelOnly helpottaa ymmärtää, missä virhe on, tai poistaa päällekkäisyyksiä. Huomaa, että asp-validation-yhteenvetossa näkyvä viesti on vain sanoma, jossa on tyhjä avain.

Muuten, voit lisätä niin monta viestiä kuin haluat tyhjään avaimeen, joten sinun ei tarvitse yhdistää merkkijonoja näyttää useita viestejä.

Jos haluat kerätä virhesanomia yhdessä paikassa, Määritä Ei mitään -kohdassa dynaamisesti, kun et halua virhesanoman näkyvän mistään syystä. On hyvä käyttää sitä varten.