Вижте как работи asp-валидиране-обобщение

Страницата се актуализира :
Дата на създаване на страница :

Околната среда

Визуално студио
  • Изглед от 10 до 2008
ASP.NET ядро
  • 3.0
  • 3.1

На първо време

ASP.NET Има начин да използвате asp-проверка-обобщение като начин за показване на грешките при проверка на въвеждане на екрана в ядро. Не разбирах разликата между параметрите, които мога да определя, така че проверих.

Има три възможни стойности:

  • Никой
  • Модел
  • Всички

В резултат на проучването на начина, по който работи всяка от тези разлики, резултатът е както следва:

Предварителна подготовка

Засега ще се подготвим за операцията. Повечето от тях са излишни, така че ако искате да видите резултатите, вижте втората половина на статията.

Това удостоверяване предполага, че искате да регистрирате потребителя във формуляра, така че ние ще създадем модел на изглед за потребителя. Сложих различни елементи, но съдържанието не е от значение, защото е възможно да се провери дали има поне един. Ние ще проверим с DataAnnotation, така че ние ще зададем задължителни и StringLength атрибути. За да видите разликата в поведението, аз просто сложи в допълнително IsCepted.

** Модели/Потребителски ИзгледМодели **

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; }
  }
}

За да разгледате трите стойности на asp-валидиране-обобщение, създайте всяко действие. Обаче, тъй като asp-validation-summary е страничен преглед, съдържанието на всяко действие е един и същ код, с изключение на съобщенията.

Ако IsAccepted не е отметнато, ние добавяме грешка. Грешката се добавя към грешката с ключ, различен от този на модела и празен клавиш.

Ако няма грешки, покажете успешно съобщение за регистрация.

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 добавя връзка към страницата, където всеки тест се прави.

1000000000000000

@{
    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>

Това е потребителската регистрация за проверка. Ако има грешка, укажете няма за asp-проверка-резюме като параметър за показване на съдържанието му. Ние също така сложи изречението "Грешка директен запис" в div тага, за да видите дали се показва съобщение за грешка по подразбиране.

Другият код не се обсъжда подробно, защото това е кодът, който е генериран автоматично от скелета въз основа на модела. (Някои от тях са фиксирани на ръка, но това няма нищо общо с тази проверка.)

Има маркер за обхват с атрибут asp-validation-for, зададен близо до всяко поле за въвеждане (входен маркер). Това е етикет (атрибут) за показване на съобщения за грешки за всяко поле за въвеждане. Независимо от параметъра, зададен в asp-проверка-резюме, винаги се показва съобщение за грешка на това място, ако има грешка.

Също така asp-validation-Summary показва резултатите от проверката на сървъра, така че процесът на проверка на клиента (_ValidationScriptsPartial) коментира.

1000000000000000000000

@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 страници са само ако не зададете модел Само за asp проверка-резюме. Текстът на дисплея е същият като проверката на екрана.

1000000000000000000000000000

@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 страници са почти идентични, с изключение на задаването на обобщение на asp-проверка на обобщението.

1000000000000000000

@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>

@* 省略 *@

Проверете операцията

Никой

След като създадете програмата, опитайте да проверите операцията. asp-валидиране-резюме =Няма екран.

Тъй като "Грешка директно въвеждане" се показва в първоначалното състояние на дисплея, тя не изглежда да бъде в състояние да се използва като съобщение за грешка по подразбиране. Има параметри, които са зададени на Изисква, така че нека да продължим да извършваме процеса на актуализиране.

Като име на няма нищо не се показва, ако има грешка. Съобщението за грешка по подразбиране остава непокътнат, така че няма вероятност да зададете Нито един директно и да го използвате. Ако имате възможност да го използвате, искате ли динамично да зададете стойността на asp-обобщение-проверка и няма, ако не искате да видите грешка?

Модел

Asp-валидиране- Резюме = Екранът сМодел. Мисля, че има много употреба сцени най-много, защото тя излиза в извадката на грешката в проверката и скеле.

Тъй като текстът на "Грешка директно въвеждане", който е поставен в div таг не се показва, изглежда, че няма проблем, дори и да го поставите.

Това е състояние, в което се извършва процеса на регистрация и се показва грешката. Единствените съобщения, показани тук, са по подразбиране съобщения, които са били поставени преди това в div таг и съобщения за грешки, които са възникнали от страна на сървъра. Обърнете внимание, че ако не разполагате с празен ключ съобщение от страна на сървъра, съобщението в div таг няма да се появи.

От страна на сървъра се поставят две съобщения за грешка, но се показва само грешката с празни знаци в ключа. Ако зададете ключ, той ще бъде третиран като грешка в свойството на модела с това име, така че той да не се появява в asp-обобщението. Вместо това се показва съобщение на всеки етикет с asp-проверка за атрибут на същото име.

Всички

Asp-обобщение- Обобщение =Всичко е посочено на екрана.

По някаква причина се показва текстът на вградения "грешка директен вход". Не съм сигурен защо не виждам Само модел. Изглежда, че вграждането не може да се използва във всички за момента.

Това е екран след процеса на обновяване се извършва, както е. Съобщенията за грешки за всички полета за въвеждане (свойства) се показват в списък. Всяко поле за въвеждане също показва съобщение за грешка, така че ако искате да посочите All, за да обобщите грешката, Би било по-добре да премахнете asp-validation-за атрибута, зададен за всяко поле за въвеждане.

Съобщенията за грешки, добавени от страната на сървъра, също се показват. Можете също да видите, че виждате грешка и с ключа.

Резюме

Обобщението на asp-валидиране имаше три параметъра. Може да искате да използвате ModelOnly, за да улесните разбирането къде е грешката или да се премахне дублирането. Имайте предвид, че единственото съобщение, показано в asp-проверка-резюме е съобщение с празен ключ.

Между другото, можете да добавите колкото се може повече съобщения, колкото искате, за да празен ключ, така че не е нужно да комбинирате низове, за да покажете няколко съобщения.

За Всички, ако искате да събирате съобщения за грешки на едно място, За Няма, задайте динамично, когато не искате да се появява съобщение за грешка по някаква причина. Добре е да го използвате за целите на.