Lihat cara kerja asp-validation-summary

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan

Studio visual
  • Visual Studio 2019
ASP.NET inti
  • 3,0
  • 3,1

Pada mulanya

ASP.NET ada cara untuk menggunakan ASP-validasi-ringkasan sebagai cara untuk menampilkan kesalahan validasi input pada layar di Core. Saya tidak terlalu memahami perbedaan antara parameter yang bisa saya Tentukan, jadi saya memeriksanya.

Ada tiga nilai yang mungkin:

  • Tidak
  • Hanya ModelOnly
  • Semua

Sebagai hasil dari memeriksa bagaimana masing-masing perbedaan ini bekerja, hasilnya adalah sebagai berikut:

Pra-Persiapan

Untuk saat ini, kami akan mempersiapkan diri untuk operasi. Kebanyakan dari mereka adalah berlebihan, jadi jika Anda hanya ingin melihat hasilnya, lihat paruh kedua artikel.

Validasi ini mengasumsikan bahwa Anda ingin mendaftarkan pengguna dalam formulir, jadi kami akan membuat model tampilan untuk pengguna. Aku menaruh berbagai item, tapi isinya tidak peduli apa-apa karena mungkin untuk memverifikasi jika ada setidaknya satu. Kita akan memeriksa dengan DataAnnotation, jadi kita akan mengatur atribut required dan StringLength. Untuk melihat perbedaan dalam perilaku, saya hanya dimasukkan ke dalam tambahan Isditerima.

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

Untuk memeriksa tiga nilai ASP-validasi-ringkasan, membuat setiap tindakan. Namun, karena ASP-validasi-ringkasan adalah tampilan cerita sisi, isi dari setiap tindakan adalah semua kode yang sama kecuali untuk pesan.

Jika Isditerima tidak dicentang, kami menambahkan kesalahan. Galat ditambahkan ke galat dengan kunci yang berbeda dari model dan kunci kosong.

Jika tidak ada kesalahan, Tampilkan pesan pendaftaran yang berhasil.

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 menambahkan link ke halaman di mana setiap tes dilakukan.

Indeks. 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>

Ini adalah halaman pendaftaran pengguna untuk verifikasi. Jika ada kesalahan, tentukan tidak ada untuk ASP-validasi-ringkasan sebagai parameter untuk menampilkan isinya. Kami juga menempatkan "kesalahan langsung masuk" kalimat di tag div untuk melihat jika pesan kesalahan default ditampilkan.

Kode lainnya tidak dibahas secara rinci karena merupakan kode yang secara otomatis dihasilkan oleh perancah berdasarkan model. (Beberapa dari mereka telah diperbaiki dengan tangan, tetapi tidak ada hubungannya dengan verifikasi ini.)

Ada Tag span dengan ASP-validasi-untuk menetapkan atribut dekat setiap bidang input (Tag input). Ini adalah tag (atribut) untuk menampilkan pesan kesalahan untuk setiap kolom input. Terlepas dari parameter yang ditentukan dalam ASP-validasi-ringkasan, pesan galat selalu ditampilkan di lokasi tersebut jika ada kesalahan.

Selain itu, ASP-validasi-ringkasan Menampilkan hasil verifikasi server, sehingga proses validasi klien (_ValidationScriptsPartial) komentar.

Untuk 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 halaman hanya kecuali Anda menetapkan modelonly untuk ASP-validasi-ringkasan. Teks tampilan adalah sama dengan ValidateNone. cshtml mengintip di.

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 halaman hampir identik kecuali untuk menentukan semua untuk ASP-validasi-ringkasan.

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>

@* 省略 *@

Periksa operasi

Tidak

Setelah Anda membuat program, cobalah untuk memeriksa operasi. ASP-validasi-ringkasan =tidak ada layar.

Sejak "galat langsung input" ditampilkan dalam keadaan tampilan awal, tampaknya tidak dapat digunakan sebagai pesan galat asali. Ada parameter yang telah ditetapkan ke diperlukan, jadi mari kita lanjutkan untuk melakukan proses update.

Sebagai nama none, tidak ada yang ditampilkan jika ada kesalahan. Pesan kesalahan default tetap utuh, sehingga tidak mungkin ada kesempatan untuk mengatur none secara langsung dan menggunakannya. Jika Anda memiliki kesempatan untuk menggunakannya, Apakah Anda ingin secara dinamis menetapkan nilai ke ASP-validasi-ringkasan dan tidak ada jika Anda tidak ingin melihat kesalahan?

Hanya ModelOnly

ASP-validasi-Ringkasan = layar denganModelonly. Saya berpikir bahwa ada banyak penggunaan adegan yang paling karena keluar dalam sampel kesalahan verifikasi dan perancah.

Karena teks "kesalahan input langsung" yang ditempatkan dalam tag div tidak ditampilkan, tampaknya tidak ada masalah bahkan jika Anda meletakkannya.

Ini adalah keadaan di mana proses pendaftaran dilakukan dan galat ditampilkan. Satu-satunya pesan yang ditampilkan di sini adalah pesan default yang sebelumnya ditempatkan di tag div dan pesan galat yang terjadi di sisi server. Namun, perlu diketahui bahwa jika Anda tidak memiliki pesan kunci kosong di sisi server, pesan di tag div tidak akan muncul.

Di sisi server, dua pesan galat diletakkan, tetapi hanya kesalahan dengan karakter kosong di kunci ditampilkan. Jika Anda menetapkan kunci, itu akan diperlakukan sebagai kesalahan dalam properti model dengan nama itu, sehingga tidak muncul di ASP-validasi-ringkasan. Namun, pesan muncul pada tag dengan ASP-validasi-untuk atribut nama yang sama.

Semua

ASP-validasi-ringkasan =semua ditentukan pada layar.

Untuk beberapa alasan, teks yang tertanam "galat langsung input" ditampilkan. Saya tidak yakin mengapa saya tidak melihat ModelOnly saja. Tampaknya embedding tidak dapat digunakan dalam semua untuk saat ini.

Ini adalah layar setelah proses update dilakukan seperti itu. Pesan galat untuk semua kolom input (properti) ditampilkan dalam daftar. Setiap kolom input juga menampilkan pesan kesalahan, jadi jika Anda ingin menentukan semua untuk meringkas kesalahan, Akan lebih baik untuk menghapus ASP-validasi-untuk menetapkan atribut untuk setiap kolom input.

Pesan galat yang ditambahkan pada sisi server juga ditampilkan. Anda juga dapat melihat bahwa Anda juga melihat kesalahan dengan kunci.

Ringkasan

ASP-validasi-ringkasan memiliki tiga parameter. Anda mungkin ingin menggunakan ModelOnly untuk membuatnya lebih mudah untuk memahami di mana kesalahan itu, atau untuk menghilangkan duplikasi. Perhatikan bahwa satu-satunya pesan yang ditampilkan di ASP-validasi-ringkasan adalah pesan dengan kunci kosong.

By the way, Anda dapat menambahkan sebanyak pesan yang Anda inginkan untuk sebuah kunci kosong, sehingga Anda tidak perlu menggabungkan string untuk menampilkan beberapa pesan.

Untuk semua, jika Anda ingin mengumpulkan pesan kesalahan di satu tempat, Untuk none, ditetapkan secara dinamis ketika Anda tidak ingin pesan kesalahan muncul karena alasan apa pun. Adalah baik untuk menggunakannya untuk tujuan.