Sehen Sie, wie asp-validation-summary funktioniert

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Umgebung

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.0
  • 3.1

Zunächst

ASP.NET Es gibt eine Möglichkeit, asp-validation-summary als eine Möglichkeit zu verwenden, Eingabevalidierungsfehler auf dem Bildschirm in Core anzuzeigen. Ich verstand den Unterschied zwischen den Parametern, die ich angeben konnte, nicht wirklich, also überprüfte ich ihn.

Es gibt drei mögliche Werte:

  • nichts
  • Nur Model
  • Alle

Als Ergebnis der Untersuchung, wie jede dieser Unterschiede funktioniert, ist das Ergebnis wie folgt:

Vorbereitung

Vorerst werden wir uns auf die Operation vorbereiten. Die meisten von ihnen sind redundant, also, wenn Sie nur die Ergebnisse sehen möchten, sehen Sie sich die zweite Hälfte des Artikels an.

Bei dieser Überprüfung wird davon ausgegangen, dass Sie den Benutzer im Formular registrieren möchten, sodass wir ein Ansichtsmodell für den Benutzer erstellen. Ich habe verschiedene Punkte, aber der Inhalt spielt keine Rolle, weil es möglich ist, zu überprüfen, ob es mindestens eine. Wir überprüfen dataAnnotation, daher legen wir die Attribute Required und StringLength fest. Um den Unterschied im Verhalten zu sehen, habe ich einfach eine zusätzliche IsAccepted eingesteckt.

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

Um die drei Werte von asp-validation-summary zu untersuchen, erstellen Sie jede Aktion. Da asp-validation-summary jedoch eine Ansichtsidestory ist, ist der Inhalt jeder Aktion alle derselbe Code mit Ausnahme von Nachrichten.

Wenn IsAccepted nicht aktiviert ist, fügen wir einen Fehler hinzu. Der Fehler wird dem Fehler mit einem anderen Schlüssel als dem Modell und einem leeren Schlüssel hinzugefügt.

Wenn keine Fehler auftreten, zeigen Sie eine erfolgreiche Registrierungsmeldung an.

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 fügt einen Link zu der Seite hinzu, auf der jeder Test durchgeführt wird.

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>

Dies ist die Seite zur Benutzerregistrierung zur Überprüfung. Wenn ein Fehler auftritt, geben Sie Keine für asp-validation-summary als Parameter an, um den Inhalt anzuzeigen. Wir setzen auch den Satz "Error Direct Entry" in das div-Tag, um zu sehen, ob die Standardfehlermeldung angezeigt wird.

Anderer Code wird nicht im Detail behandelt, da es sich um den Code handelt, der automatisch von Gerüsten basierend auf dem Modell generiert wurde. (Einige von ihnen wurden von Hand fixiert, aber es hat nichts mit dieser Überprüfung zu tun.)

Es gibt ein Span-Tag mit dem asp-validation-for-Attribut, das in der Nähe jedes Eingabefelds (Eingabe-Tag) festgelegt ist. Dies ist ein Tag (Attribut) zum Anzeigen von Fehlermeldungen für jedes Eingabefeld. Unabhängig von dem in asp-validation-summary angegebenen Parameter wird immer eine Fehlermeldung an diesem Speicherort angezeigt, wenn ein Fehler auftritt.

Außerdem zeigt asp-validation-summary die Serverüberprüfungsergebnisse an, sodass der Clientvalidierungsprozess (_ValidationScriptsPartial) kommentiert wird.

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.cshtml-Seiten sind nur möglich, es sei denn, Sie geben ModelOnly für asp-validation-summary an. Der Anzeigetext ist derselbe wie ValidateNone.cshtml.

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-Seiten sind fast identisch, mit Ausnahme der Angabe von All for asp-validation-summary.

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>

@* 省略 *@

Überprüfen sie den Vorgang

nichts

Nachdem Sie das Programm erstellt haben, versuchen Sie, den Vorgang zu überprüfen. asp-validation-summary=Kein Bildschirm.

Da "Error direct input" im anfänglichen Anzeigezustand angezeigt wird, scheint es nicht in der Lage zu sein, als Standardfehlermeldung verwendet zu werden. Es gibt Parameter, die auf Erforderlich festgelegt wurden, also führen wir den Aktualisierungsvorgang fort.

Als Name von Keine wird nichts angezeigt, wenn ein Fehler auftritt. Die Standardfehlermeldung bleibt intakt, sodass es unwahrscheinlich ist, dass die Wahrscheinlichkeit besteht, Keine direkt festzulegen und sie zu verwenden. Wenn Sie die Möglichkeit haben, ihn zu verwenden, möchten Sie den Wert dynamisch auf asp-validation-summary und keinen wert, wenn Sie keinen Fehler sehen möchten?

Nur Model

Asp-validation-summary= Der Bildschirm mitModelOnly. Ich denke, dass es eine Menge von Nutzungsszenen am meisten, weil es in der Probe der Überprüfung Fehler und Gerüste kommt.

Da der Text von "Error direct input", der im div-Tag platziert wurde, nicht angezeigt wird, scheint es kein Problem zu geben, selbst wenn Sie es setzen.

Es ist ein Zustand, in dem der Registrierungsprozess ausgeführt wird und der Fehler angezeigt wird. Die einzigen hier angezeigten Meldungen sind die Standardmeldungen, die zuvor im div-Tag platziert wurden, und die Fehlermeldungen, die auf der Serverseite aufgetreten sind. Beachten Sie jedoch, dass die Nachricht im div-Tag nicht angezeigt wird, wenn Sie keine leere Schlüsselnachricht auf der Serverseite haben.

Auf der Serverseite werden zwei Fehlermeldungen gesetzt, aber nur der Fehler mit leeren Zeichen im Schlüssel wird angezeigt. Wenn Sie einen Schlüssel angeben, wird er als Fehler in der Eigenschaft des Modells mit diesem Namen behandelt, sodass er nicht in der asp-validation-summary angezeigt wird. Stattdessen wird an jedem Tag eine Nachricht mit dem attribut asp-validation-for mit demselben Namen angezeigt.

Alle

Asp-validation-summary=Alles wird auf dem Bildschirm angegeben.

Aus irgendeinem Grund wird der Text der eingebetteten "fehlerdirekten Eingabe" angezeigt. Ich bin mir nicht sicher, warum ich ModelOnly nicht allein sehe. Es scheint, dass die Einbettung vorerst nicht in All verwendet werden kann.

Es ist ein Bildschirm, nachdem der Aktualisierungsvorgang so ausgeführt wurde, wie er ist. Fehlermeldungen für alle Eingabefelder (Eigenschaften) werden in einer Liste angezeigt. Jedes Eingabefeld zeigt auch eine Fehlermeldung an, wenn Sie also Alle angeben möchten, um den Fehler zusammenzufassen, Es wäre besser, den asp-validation-for-Attributsatz für jedes Eingabefeld zu entfernen.

Fehlermeldungen, die auf der Serverseite hinzugefügt werden, werden ebenfalls angezeigt. Sie können auch sehen, dass Sie auch einen Fehler mit der Taste anzeigen.

Zusammenfassung

Asp-validation-summary hatte drei Parameter. Sie können ModelOnly verwenden, um zu erleichtern, zu verstehen, wo sich der Fehler befindet, oder um Doppelarbeit zu vermeiden. Beachten Sie, dass die einzige Meldung, die in asp-validation-summary angezeigt wird, eine Nachricht mit einem leeren Schlüssel ist.

Übrigens können Sie einem leeren Schlüssel beeine, sodass Sie keine Zeichenfolgen kombinieren müssen, um mehrere Nachrichten anzuzeigen.

Für alle, wenn Sie Fehlermeldungen an einem Ort sammeln möchten, Legen Sie für Keine dynamisch fest, wenn aus irgendeinem Grund keine Fehlermeldung angezeigt werden soll. Es ist gut, es für die Zwecke zu verwenden.