Se, hvordan asp-validation-summary fungerer

Side opdateret :
Dato for oprettelse af side :

Miljø

Visuel Studio
  • Visual Studio 2019
ASP.NET Kerne
  • 3.0
  • 3.1

Ved første

ASP.NET Der er en måde at bruge asp-validering-resumé som en måde at vise input validering fejl på skærmen i Core. Jeg forstod ikke rigtig forskellen mellem de parametre, som jeg kunne angive, så jeg tjekkede det.

Der er tre mulige værdier:

  • Ingen
  • ModelKun
  • Alle

Som et resultat af at undersøge, hvordan hver af disse forskelle fungerer, resultatet er som følger:

Forbehandling

For øjeblikket vil vi forberede operationen. De fleste af dem er overflødige, så hvis du kun ønsker at se resultaterne, se den anden halvdel af artiklen.

Denne validering forudsætter, at du vil registrere brugeren i formularen, så vi opretter en visningsmodel for brugeren. Jeg sætter forskellige punkter, men indholdet betyder ikke noget noget, fordi det er muligt at kontrollere, om der er mindst én. Vi tjekker med DataAnnotation, så vi angiver attributterne Required og StringLength. For at se forskellen i adfærd, jeg bare sat i en ekstra IsAccepted.

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

Hvis du vil undersøge de tre værdier i asp-valideringsoversigt, skal du oprette hver handling. Men da asp-validering-resumé er en visning side historie, indholdet af hver handling er alle den samme kode med undtagelse af meddelelser.

Hvis IsAccepted ikke er markeret, tilføjer vi en fejl. Fejlen føjes til fejlen med en anden nøgle end modellen og en tom nøgle.

Hvis der ikke er nogen fejl, skal du vise en vellykket registreringsmeddelelse.

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 tilføjer et link til den side, hvor hver test udføres.

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>

Dette er brugerregistreringssiden til bekræftelse. Hvis der er en fejl, skal du angive Ingen for asp-valideringsoversigt som en parameter for at få vist indholdet. Vi har også sat sætningen "Fejl direkte indtastning" i div-koden for at se, om standardfejlmeddelelsen vises.

Anden kode diskuteres ikke i detaljer, fordi det er den kode, der automatisk blev genereret af stilladser baseret på modellen. (Nogle af dem er blevet fastsat i hånden, men det har intet at gøre med denne kontrol.)

Der er en span-kode med asp-validering-for attribut sat i nærheden af hvert input felt (input tag). Dette er en kode (attribut) til visning af fejlmeddelelser for hvert inputfelt. Uanset hvilken parameter der er angivet i asp-valideringsoversigten, vises der altid en fejlmeddelelse på den pågældende placering, hvis der opstår en fejl.

Asp-validation-resumeet viser også resultaterne af serverbekræftelsen, så klientvalideringsprocessen (_ValidationScriptsPartial) kommenterer.

ValiderNone.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-sider er kun, medmindre du angiver ModelKun for asp-valideringsoversigt. Den viste tekst er den samme som ValidateNone.cshtml kigger på.

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-sider er næsten identiske bortset fra angivelse af Alle til asp-valideringsoversigt.

ValiderAll.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>

@* 省略 *@

Kontroller operationen

Ingen

Når du har oprettet programmet, skal du prøve at kontrollere handlingen. asp-validering-resumé=Ingen skærm.

Da "Fejl direkte input" vises i den oprindelige visningstilstand, ser det ikke ud til at kunne bruges som en standardfejlmeddelelse. Der er parametre, der er angivet til Påkrævet, så lad os fortsætte med at udføre opdateringsprocessen.

Som navnet på Ingen vises der intet, hvis der er en fejl. Standardfejlmeddelelsen forbliver intakt, så der er næppe en chance for at indstille Ingen direkte og bruge den. Hvis du har mulighed for at bruge den, vil du så dynamisk indstille værdien til asp-valideringsoversigt og ingen, hvis du ikke vil se en fejl?

ModelKun

Asp-validering-resumé= Skærmen medModelOnly. Jeg tror, at der er en masse brug scener mest, fordi det kommer ud i prøven af verifikation fejl og stilladser.

Da teksten til "Fejl direkte input", der blev placeret i div-tag ikke vises, ser det ud til, at der ikke er noget problem, selvom du lægger det.

Det er en tilstand, hvor registreringsprocessen udføres, og fejlen vises. De eneste meddelelser, der vises her, er de standardmeddelelser, der tidligere blev placeret i div-koden, og de fejlmeddelelser, der opstod på serversiden. Bemærk dog, at hvis du ikke har en tom nøglemeddelelse på serversiden, vises meddelelsen i div-koden ikke.

På serversiden placeres to fejlmeddelelser, men kun fejlen med tomme tegn i nøglen vises. Hvis du angiver en nøgle, behandles den som en fejl i egenskaben for modellen med det pågældende navn, så den vises ikke i asp-valideringsoversigten. I stedet vises der en meddelelse i et hvilket som helst mærke med attributten asp-validation for af samme navn.

Alle

Asp-validering-resumé=Alt er angivet på skærmen.

Af en eller anden grund vises teksten i det integrerede "fejl direkte input". Jeg er ikke sikker på, hvorfor jeg ikke kan se ModelOnly alene. Det lader til, at indlejring ikke kan bruges i Alle for tiden.

Det er en skærm, når opdateringsprocessen udføres som den er. Fejlmeddelelser for alle inputfelter (egenskaber) vises på en liste. Hvert inputfelt viser også en fejlmeddelelse, så hvis du vil angive Alle for at opsummere fejlen, Det ville være bedre at fjerne attributten ASP-validering for hvert inputfelt.

Der vises også fejlmeddelelser, der er tilføjet på serversiden. Du kan også se, at du også får vist en fejl med nøglen.

Resumé

Asp-validering-resumé havde tre parametre. Du kan bruge ModelKun for at gøre det lettere at forstå, hvor fejlen er, eller for at eliminere dobbeltarbejde. Bemærk, at den eneste meddelelse, der vises i asp-valideringsoversigten, er en meddelelse med en tom nøgle.

Du kan i øvrigt føje så mange meddelelser, du vil, til en tom nøgle, så du ikke behøver at kombinere strenge for at få vist flere meddelelser.

For Alle, hvis du vil indsamle fejlmeddelelser på ét sted, For Ingen skal du angive dynamisk, når du af en eller anden grund ikke ønsker, at en fejlmeddelelse skal vises. Det er godt at bruge det med henblik på.