Veure com funciona l'asp-validation-summary

Pàgina actualitzada :
Data de creació de la pàgina :

Medi ambient

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3,0
  • 3,1

Al principi

ASP.NET hi ha una manera d'utilitzar ASP-validació-resum com una manera de mostrar els errors de validació d'entrada a la pantalla en el nucli. No entenia realment la diferència entre els paràmetres que podria especificar, així el comprovava.

Hi ha tres valors possibles:

  • Cap
  • ModelOnly
  • Tots els

Com a resultat d'examinar com funciona cadascuna d'aquestes diferències, el resultat és el següent:

Pre-preparació

De moment, ens prepararem per a l'operació. La majoria d'ells són redundants, de manera que si només voleu veure els resultats, vegeu la segona meitat de l'article.

Aquesta validació assumeix que voleu registrar l'usuari en el formulari, per la qual cosa crearem un model de visualització per a l'usuari. Poso diversos articles, però el contingut no importa res perquè és possible verificar si hi ha com a mínim un. Anem a comprovar amb la notació de Dataanon, per la qual cosa anem a establir els atributs requerits i StringLength. Per veure la diferència en el comportament, acabo de posar un Isacceptat extra.

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

Per examinar els tres valors d'ASP-validació-resum, crear cada acció. No obstant això, des d'ASP-validació-resum és una història lateral de la vista, el contingut de cada acció són el mateix codi, excepte per als missatges.

Si no està activada l'Isacceptat, estem afegint un error. L'error s'afegeix a l'error amb una clau diferent de la del model i d'una clau buida.

Si no hi ha errors, mostreu un missatge de registre reeixit.

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 afegeix un enllaç a la pàgina on es realitza cada prova.

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>

Aquesta és la pàgina de registre d'usuari per a la verificació. Si hi ha un error, especifiqueu-ne cap per a l'ASP-validació-resum com a paràmetre per visualitzar-ne el contingut. També posem la frase "entrada directa d'error" a l'etiqueta div per veure si es Mostra el missatge d'error predeterminat.

Un altre codi no es discuteix detalladament perquè és el codi que s'ha generat automàticament per bastida basat en el model. (Alguns d'ells s'han fixat a mà, però no té res a veure amb aquesta verificació.)

Hi ha una etiqueta span amb el conjunt d'atributs de validació ASP per a prop de cada camp d'entrada (etiqueta d'entrada). Es tracta d'una etiqueta (atribut) per mostrar missatges d'error per a cada camp d'entrada. Independentment del paràmetre especificat a ASP-validació-resum, sempre es mostra un missatge d'error en aquesta ubicació si hi ha un error.

A més, ASP-validació-resum Mostra els resultats de verificació del servidor, de manera que el procés de validació del client (_ValidationScriptsPartial) comenta.

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. les pàgines cshtml només són a menys que especifiqueu modelnomés per a ASP-validació-resum. El text de visualització és el mateix que validatenone. cshtml espiant at.

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 pàgines són gairebé idèntiques excepte per especificar tot per a ASP-validació-resum.

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>

@* 省略 *@

Comprovar l'operació

Cap

Després de crear el programa, proveu de comprovar l'operació. ASP-validació-resum =cap pantalla.

Ja que "l'entrada directa d'error" es mostra en l'estat d'exhibició inicial, no sembla que pugui ser utilitzat com a missatge d'error d'omissió. Hi ha paràmetres que s'han definit com a obligatoris, així que continuarem realitzant el procés d'actualització.

Com a nom de cap, no es mostra res si hi ha un error. El missatge d'error predeterminat roman intacta, així que és poc probable que l'oportunitat de posar cap directament i utilitzar-lo. Si teniu l'oportunitat d'usar-lo, voleu establir dinàmicament el valor en ASP-Validation-Summary i cap si no voleu veure un error?

ModelOnly

ASP-validació-resum = la pantalla amb elmodel només. Crec que hi ha un munt d'ús de les escenes més perquè surt a la Mostra de l'error de verificació i bastides.

Atès que el text de "error d'entrada directa" que es va col·locar en l'etiqueta div no apareix, sembla que no hi ha cap problema, fins i tot si ho poses.

És un estat en el qual es realitza el procés de registre i es mostra l'error. Els únics missatges que es mostren aquí són els missatges predeterminats que anteriorment es van col·locar a l'etiqueta div i els missatges d'error que es van produir al costat del servidor. Tingueu en compte, però, que si no teniu un missatge de clau buida al costat del servidor, el missatge de l'etiqueta div no apareixerà.

Al costat del servidor, es posen dos missatges d'error, però només es mostra l'error amb caràcters buits a la tecla. Si s'especifica una clau, es tractarà com un error a la propietat del model amb aquest nom, per la qual cosa no apareix al ASP-validació-resum. En lloc d'això, apareixerà un missatge en qualsevol etiqueta amb la validació ASP-per a l'atribut del mateix nom.

Tots els

ASP-validació-resum =tot s'especifica a la pantalla.

Per alguna raó, es Mostra el text de l'incrustat "error d'entrada directa". No sóc segur per què no veig ModelOnly de manera sola. Sembla que la incrustació no es pot utilitzar en tot de moment.

És una pantalla després que el procés d'actualització es realitzi com és. Els missatges d'error per a tots els camps d'entrada (propietats) es visualitzen en una llista. Cada camp d'entrada també mostra un missatge d'error, de manera que si voleu especificar-ho tot per resumir l'error, Seria millor eliminar el conjunt d'atributs d'ASP-validació-per a cada camp d'entrada.

També es mostren els missatges d'error afegits al servidor. També podeu veure que també esteu visualitzant un error amb la clau.

Resum

ASP-validació-resum va tenir tres paràmetres. Pot voler utilitzar ModelOnly per fer més fàcil entendre on és l'error, o per eliminar duplicació. Tingueu en compte que l'únic missatge que es mostra a ASP-Validation-Summary és un missatge amb una clau buida.

Per cert, podeu afegir tants missatges com vulgueu a una clau buida, de manera que no heu de combinar cadenes per mostrar diversos missatges.

Per a tots, si voleu recopilar missatges d'error en un sol lloc, Per a cap, definiu dinàmicament quan no vulgueu que aparegui un missatge d'error per qualsevol motiu. És bo utilitzar-lo per al propòsit de.