Uzziniet , kā darbojas ASP validācijas kopsavilkums

Lapa atjaunota :
Lapas izveides datums :

Vides

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

Sākumā

ASP.NET Ir veids, kā izmantot asp-validation-summary kā veidu, kā parādīt ievades validācijas kļūdas uz ekrāna Core. Man nav īsti saprast atšķirību starp parametriem, ka es varētu norādīt, tāpēc es pārbaudīju to.

Ir trīs iespējamās vērtības:

  • Neviens
  • Tikai modelis
  • Visas

Pētot, kā darbojas katra no šīm atšķirībām, rezultāts ir šāds:

Pirmssagatavošanas

Pagaidām mēs sagatavosies operācijai. Lielākā daļa no tiem ir lieki, tādēļ, ja jūs tikai vēlaties redzēt rezultātus, skatiet raksta otro pusi.

Šajā validācijā tiek pieņemts, ka vēlaties reģistrēt lietotāju formā, tāpēc mēs izveidosim lietotāja skata modeli. Man dažādus priekšmetus, bet saturs nav svarīgi neko, jo tas ir iespējams pārbaudīt, vai ir vismaz viens. Mēs pārbaudīsim dataannotation, tāpēc mēs noteikti Required un StringLength atribūtus. Lai redzētu atšķirību uzvedībā, es tikai īstenot papildus IsAccepted.

** Modeļi / 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; }
  }
}

Lai pārbaudītu asp-validation kopsavilkuma trīs vērtības, izveidojiet katru darbību. Tomēr, tā kā asp-validation-summary ir skata sānu stāsts, katras darbības saturs ir tas pats kods, izņemot ziņojumus.

Ja isaccepted nav pārbaudīts, mēs pievienojam kļūdu. Kļūda tiek pievienota kļūdai ar citu atslēgu nekā modelis un tukša atslēga.

Ja nav kļūdu, parādīt veiksmīgu reģistrācijas ziņojumu.

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 pievieno saiti uz lapu, kur katrs tests tiek veikts.

index.cshtml 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>

Šī ir lietotāja reģistrācijas lapa pārbaudei. Ja ir kļūda, asp-validation-summary kā parametru, lai parādītu tā saturu, norādiet Nav. Mēs arī nodot "Error Direct Entry" teikumu div tagu, lai redzētu, vai noklusējuma kļūdas ziņojums tiek parādīts.

Cits kods nav detalizēti apspriests, jo tas ir kods, ko automātiski ģenerēja sastatnes, pamatojoties uz modeli. (Daži no tiem ir noteikti ar rokām, bet tai nav nekāda sakara ar šo pārbaudi.)

Ir span tag ar asp-validation-for atribūts, kas noteikts pie katra ievades lauka (ievades tag). Šis ir tags (atribūts) kļūdu ziņojumu parādīšanai katram ievades laukam. Neatkarīgi no parametra, kas norādīts asp-validation-summary, kļūdas ziņojums vienmēr tiek parādīts šajā atrašanās vietā, ja ir kļūda.

Turklāt asp-validation-summary parāda servera verifikācijas rezultātus, tāpēc klienta validācijas process (_ValidationScriptsPartial) komentārus.

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

ValidModelOnly.cshtml lapas ir tikai tad, ja nenorādāt ModelOnly asp-validation-summary. Displeja teksts ir tāds pats kā ValidateNone.cshtml palūrēt at.

ValidateModelOnly.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 lapas ir gandrīz identiskas, izņemot norādot Visi asp-validation-summary.

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

@* 省略 *@

Pārbaudīt operāciju

Neviens

Pēc programmas izveides mēģiniet pārbaudīt operāciju. asp-validation-summary =Neviens ekrāns.

Tā kā "Kļūdas tiešā ievade" tiek parādīts sākotnējā displeja stāvoklī, tas, šķiet, nevar izmantot kā noklusējuma kļūdas ziņojumu. Ir parametri, kas ir iestatīti uz Obligāts, tāpēc turpināsim veikt atjaunināšanas procesu.

Nosaukums Nav, nekas netiek parādīts, ja ir kļūda. Noklusējuma kļūdas ziņojums paliek neskarts, tāpēc ir maz ticams, ka ir iespēja iestatīt Nav tieši un izmantot to. Ja jums ir iespēja to izmantot, vai vēlaties dinamiski iestatīt vērtību asp-validation-summary un neviens, ja jūs nevēlaties redzēt kļūdu?

Tikai modelis

Asp-validation-summary= ekrāns arModelOnly. Es domāju, ka ir daudz izmantošanas ainas visvairāk, jo tas nāk noteikti paraugu pārbaudes kļūdu un sastatnes.

Tā kā teksts "Kļūda tiešu ievadi", kas tika ievietots div tag netiek parādīts, šķiet, ka nav problēmu, pat ja jūs nodot to.

Tas ir stāvoklis, kurā tiek veikts reģistrācijas process un tiek parādīta kļūda. Tikai šeit parādītie ziņojumi ir noklusējuma ziņojumi, kas iepriekš tika ievietoti div tagā, un kļūdu ziņojumi, kas tika parādīti servera pusē. Tomēr ņemiet vērā, ka, ja jums nav tukša atslēgas ziņojuma servera pusē, ziņojums div tagā neparādīsies.

Servera pusē tiek ievietoti divi kļūdu ziņojumi, bet tiek parādīta tikai kļūda ar tukšām rakstzīmēm atslēgā. Ja norādāt atslēgu, tā tiks uzskatīta par kļūdu modeļa rekvizītā ar šādu nosaukumu, tāpēc tā netiek parādīta asp-validation-summary. Tā vietā tiek parādīts ziņojums ar jebkuru tagu ar asp validācijas atribūtu ar tādu pašu nosaukumu.

Visas

Asp-validation-summary= Viss ir norādīts uz ekrāna.

Kāda iemesla dēļ tiek parādīts iegultās "kļūdas tiešās ievades" teksts. Es neesmu pārliecināts, kāpēc es neredzu ModelOnly atsevišķi. Šķiet, ka iegulšana pagaidām nevar tikt izmantota all.

Tas ir ekrāns pēc atjaunināšanas process tiek veikts, kā tas ir. Kļūdu ziņojumi visiem ievades laukiem (rekvizītiem) tiek parādīti sarakstā. Katrā ievades laukā tiek parādīts arī kļūdas ziņojums, tādēļ, ja vēlaties norādīt Visu, lai apkopotu kļūdu, Būtu labāk noņemt asp-validation-for atribūtu, kas iestatīts katram ievades laukam.

Tiek parādīti arī servera pusē pievienotie kļūdu ziņojumi. Varat arī redzēt, ka skatāt arī kļūdu ar atslēgu.

Kopsavilkuma

Asp-validation-summary bija trīs parametri. Iespējams, vēlēsities izmantot ModelOnly, lai būtu vieglāk saprast, kur ir kļūda, vai novērstu dublēšanos. Ņemiet vērā, ka asp validācijas kopsavilkumā parādītais vienīgais ziņojums ir ziņojums ar tukšu atslēgu.

Starp citu, tukšai atslēgai var pievienot tik daudz ziņojumu, cik vēlaties, tāpēc nav jāapvieno virknes, lai parādītu vairākus ziņojumus.

Visiem, ja vēlaties apkopot kļūdu ziņojumus vienuviet, Nevienam iestatiet dinamiski, ja kāda iemesla dēļ nevēlaties, lai tiktu parādīts kļūdas ziņojums. Ir labi to izmantot, lai.