Посмотрите, как работает asp-проверка-резюме

Страница обновлена :
Дата создания страницы :

Среды

Визуальная студия
  • Визуальная студия 2019
ASP.NET Ядро
  • 3.0
  • 3.1

Сначала

ASP.NET Существует способ использования апп-проверки-сводки как способ отображения ошибок проверки ввода на экране в core. Я действительно не понимаю разницу между параметрами, которые я мог бы указать, поэтому я проверил его.

Существует три возможных значения:

  • Ни один
  • МодельОнли
  • Все

В результате изучения того, как работает каждое из этих различий, результат выглядит следующим образом:

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

На время мы будем готовиться к операции. Большинство из них являются излишними, так что если вы только хотите увидеть результаты, см.

Эта проверка предполагает, что вы хотите зарегистрировать пользователя в форме, поэтому мы создадим модель представления для пользователя. Я ставлю различные элементы, но содержание не имеет значения ничего, потому что можно проверить, если есть по крайней мере один. Мы проверим с DataAnnotation, поэтому мы установит требуемые и атрибуты StringLength. Чтобы увидеть разницу в поведении, я просто положил в дополнительный 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-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 добавляет ссылку на страницу, где проводится каждый тест.

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-validation-summary в качестве параметра для отображения ее содержимого. Мы также поместили предложение "Ошибка прямого входа" в тег div, чтобы увидеть, отображается ли сообщение об ошибке по умолчанию.

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

Существует тег диапазона с асп-проверкой атрибута, установленного рядом с каждым полем ввода (тег ввода). Это тег (атрибут) для отображения сообщений об ошибках для каждого поля ввода. Независимо от параметра, указанного в сводке проверки asp,, сообщение об ошибке всегда отображается в этом месте, если есть ошибка.

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

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 только если вы не укажете ModelOnly для асп-проверки-свода. Текст дисплея такой же, как ValidateNone.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-validation.

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>

@* 省略 *@

Проверка операции

Ни один

После создания программы постарайтесь проверить операцию. асп-проверка-сводие -Нет экрана.

Поскольку "Ошибка прямого ввода" отображается в исходном состоянии дисплея, он, кажется, не может быть использован в качестве сообщения об ошибке по умолчанию. Есть параметры, которые были установлены в Required, так что давайте продолжим выполнять процесс обновления.

Как имя None, ничего не отображается, если есть ошибка. Сообщение об ошибке по умолчанию остается неизменным, поэтому вряд ли есть шанс установить None напрямую и использовать его. Если у вас есть возможность использовать его, вы хотите динамически установить значение для asp-проверки-резюме, и никто, если вы не хотите видеть ошибку?

МодельОнли

Асп-проверка-сводие- экран сModelOnly. Я думаю, что Есть много сцен использования наиболее, потому что он выходит в образце проверки ошибки и леса.

Поскольку текст "Ошибка прямого ввода", который был помещен в тег div не отображается, кажется, что нет никаких проблем, даже если вы положили его.

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

На стороне сервера отображаются два сообщения об ошибке, но отображается только ошибка с пустыми символами в ключе. Если вы укажете ключ, он будет рассматриваться как ошибка в свойстве модели с этим именем, поэтому он не отображается в своде проверки asp.- Вместо этого сообщение отображается на любом теге с атрибутом asp-validation-for с тем же именем.

Все

Асп-проверка-сводка -Все указано на экране.

По какой-то причине отображается текст встроенного "прямого ввода ошибок". Я не знаю, почему я не вижу ModelOnly в одиночку. Кажется, что встраивание не может быть использовано во Всех на время.

Это экран после того, как процесс обновления выполняется как есть. Сообщения об ошибках для всех полей ввода (свойств) отображаются в списке. Каждое поле ввода также отображает сообщение об ошибке, так что если вы хотите указать Все, чтобы обобщить ошибку, Было бы лучше удалить асп-проверки для атрибута набор для каждого поля ввода.

Сообщения об ошибках, добавленные на стороне сервера, также отображаются. Вы также можете видеть, что вы также просматриваете ошибку с ключом.

Сводка

Асп-проверка-резюме было три параметра. Вы можете использовать ModelOnly, чтобы сделать его легче понять, где ошибка, или устранить дублирование. Обратите внимание, что единственным сообщением, отображаемым в сводке проверки асп, является сообщение с пустым ключом.

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

Для всех, если вы хотите собрать сообщения об ошибках в одном месте, Для No, установите динамически, если вы не хотите, чтобы сообщение об ошибке появилось по какой-либо причине. Это хорошо, чтобы использовать его для целей.