Перегляд роботи зведення перевірки asp

Сторінка оновлюється :
Дата створення сторінки :

Середовищі

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

На перший

ASP.NET існує спосіб використання ASP-перевірка резюме як спосіб відображення помилок перевірки вводу на екрані в Core. Я не дуже розумію різницю між параметрами, які я міг би вказати, так що я перевірив його.

Є три можливих значення:

  • Ніхто
  • Тільки моделі
  • Всі

В результаті вивчення того, як працює кожна з цих відмінностей, результат виглядає наступним чином:

Попередня підготовка

В даний час, ми підготуємо для роботи. Більшість з них є надлишковими, тому, якщо ви хочете побачити результати, дивіться другу половину статті.

Ця перевірка припускає, що ви хочете зареєструвати користувача у формі, так що ми створимо модель перегляду для користувача. Я поклав різні предмети, але зміст нічого не важливо, тому що це можливо, щоб перевірити, якщо є принаймні один. Ми перевіримо з даніми, так що ми будемо встановлювати необхідні атрибути і Волокнимої довжини. Щоб побачити різницю в поведінці, я просто поклав в додаткових IsAccepted.

* * Моделі/модель 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; }
  }
}

Для вивчення трьох значень ASP-перевірка резюме, створення кожної дії. Однак, оскільки ASP-перевірка резюме є однією з сторін історія, вміст кожної дії всі ті ж код, за винятком повідомлень.

Якщо не позначено цей пункт, ми додаємо помилку. Повідомлення про помилку додається до помилки з іншим ключем, ніж модель і порожній ключ.

Якщо помилок немає, відобразіть повідомлення про успішне реєстрацію.

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 додає посилання на сторінку, де проводиться кожен тест.

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>

Це сторінка реєстрації користувача для перевірки. Якщо повідомлення про помилку, укажіть None для ASP-перевірки-резюме як параметр для відображення його вмісту. Ми також поставити "помилка прямий в'їзд" вирок у DIV тега, щоб побачити, якщо відображається повідомлення про помилку за промовчанням.

Інший код не обговорюється докладно, тому що це код, який автоматично генерується Риштування на основі моделі. (Деякі з них були виправлені вручну, але вона не має нічого спільного з цією перевіркою.)

У кожному полі вводу (вхідний тег) є позначка SPAN для набору атрибута ASP. Це тег (атрибут) для відображення повідомлень про помилки для кожного поля вводу. Незалежно від параметра, указаного в ASP-перевірки резюме, повідомлення про помилку завжди відображається в цьому розташуванні, якщо є помилка.

Крім того, ASP-перевірки резюме відображає результати перевірки сервера, тому процес перевірки клієнта (_ValidationScriptsPartial), коментарі.

Валідатенон. 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");}
}*@

Валідаемотільки. cshtml сторінки тільки якщо ви не вкажете модельтільки для ASP-перевірка-резюме. Відображуване тексту таке ж, як і Валізанone. cshtml заглядати в.

Валідаемотільки. 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 сторінки майже ідентичні, за винятком зазначення всіх для ASP-перевірки-резюме.

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>

@* 省略 *@

Перевірте операцію

Ніхто

Після створення програми спробуйте перевірити роботу. ASP-перевірка-резюме =немає екрану.

Оскільки "помилка прямого вводу" відображається у стані початкового відображення, це, здається, не може використовуватися як повідомлення про помилку за промовчанням. Є параметри, які було встановлено на обов'язковий, так що давайте продовжувати виконувати процес оновлення.

Як ім'я None, нічого не відображається, якщо є помилка. Повідомлення про помилку за промовчанням залишається незмінним, тому навряд чи шанс встановити їх безпосередньо і використовувати. Якщо у вас є можливість використовувати його, ви хочете динамічно встановити значення ASP-перевірка-резюме і немає, якщо ви не хочете, щоб побачити помилку?

Тільки моделі

ASP-перевірка-резюме = екран зМодельтільки. Я думаю, що є багато використання сцен найбільше, тому що вона виходить у зразку помилки верифікації і Риштування.

Оскільки текст "помилка прямого введення", який був поміщений в DIV тега не відображається, здається, що немає ніяких проблем, навіть якщо ви поклали його.

Це стан, в якому виконується процес реєстрації і відображається повідомлення про помилку. Лише повідомлення, які відображаються тут за промовчанням повідомлення, які раніше було розміщено у DIV тега та повідомлення про помилку, що сталася на сервері. Зауважимо, однак, що якщо у вас немає порожнього повідомлення ключа на стороні сервера, повідомлення в тегу DIV не відображатиметься.

На стороні сервера відображаються дві повідомлення про помилки, але відображається лише помилка з пустими символами в ключі. Якщо ви вкажете ключ, він буде розглядатися як помилка у власності моделі з цим ім'ям, так що він не відображається в ASP-перевірки-резюме. Замість цього повідомлення з'являється в будь-якому тегу з ASP-валідація-для атрибутів одного і того ж імені.

Всі

ASP-перевірка-резюме =все вказано на екрані.

З різних причин відображається текст вбудованого "помилка прямого вводу". Я не знаю, чому я не бачу модельєр тільки поодинці. Здається, що вбудовування не можна використовувати у всіх на даний момент.

Це екран після того, як процес оновлення виконується як є. Повідомлення про помилки для всіх полів вводу (Властивості) відображаються у списку. Кожне поле вводу також відображає повідомлення про помилку, тому, якщо потрібно вказати все, щоб підсумувати помилку, Було б краще, щоб видалити ASP-перевірки для атрибута, набір для кожного поля вводу.

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

Резюме

ASP-перевірка-резюме було три параметри. Ви можете використовувати Модельтільки, щоб полегшити зрозуміти, де ця помилка, або усунути дублювання. Зверніть увагу, що єдине повідомлення, яке відображається в ASP-перевірка резюме є повідомлення з порожнім ключем.

До речі, ви можете додати стільки повідомлень, скільки ви хочете порожній ключ, так що вам не доведеться комбінувати рядки для відображення декількох повідомлень.

Для всіх, якщо ви хочете збирати повідомлення про помилки в одному місці, Для None, встановити динамічно, коли ви не хочете, щоб повідомлення про помилку з'являтися з будь-якої причини. Це добре, щоб використовувати його з метою.