Kiểm tra cách asp-validation-summary hoạt động

Trang Cập Nhật :
Ngày tạo trang :

Môi trường

Visual Studio-giường
  • Visual Studio 2019
ASP.NET lõi
  • 3,0
  • 3,1

Lúc đầu

ASP.NET có một cách để sử dụng ASP-xác nhận-tóm tắt như một cách để hiển thị lỗi soát hợp thức đầu vào trên màn hình trong lõi. Tôi không thực sự hiểu được sự khác biệt giữa các thông số mà tôi có thể chỉ định, vì vậy tôi đã kiểm tra nó.

Có ba giá trị có thể:

  • Không
  • Không có
  • Tất cả

Như là kết quả của việc kiểm tra cách mỗi một trong những sự khác biệt này hoạt động, kết quả là như sau:

Chuẩn bị trước

Trong thời gian này, chúng tôi sẽ chuẩn bị cho hoạt động. Hầu hết trong số họ là dư thừa, vì vậy nếu bạn chỉ muốn xem kết quả, xem nửa thứ hai của bài viết.

Xác nhận này giả định rằng bạn muốn đăng ký người dùng trong biểu mẫu, vì vậy chúng tôi sẽ tạo một mô hình xem cho người dùng. Tôi đặt các mục khác nhau, nhưng nội dung không quan trọng bất cứ điều gì bởi vì nó có thể xác minh nếu có ít nhất một. Chúng tôi sẽ kiểm tra với Datachú thích, vì vậy chúng tôi sẽ thiết lập các thuộc tính bắt buộc và StringLength. Để xem sự khác biệt trong hành vi, tôi chỉ cần đặt trong một thêm Ischấp nhận.

* * Mô hình/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; }
  }
}

Để kiểm tra ba giá trị của ASP-xác nhận-tóm tắt, tạo ra mỗi hành động. Tuy nhiên, kể từ ASP-xác nhận-tóm tắt là một câu chuyện xem bên, nội dung của mỗi hành động là tất cả các mã tương tự, ngoại trừ các tin nhắn.

Nếu Ischấp nhận không được kiểm tra, chúng tôi đang thêm một lỗi. Lỗi được thêm vào lỗi với phím khác với mô hình và khoá trống.

Nếu không có lỗi, Hiển thị thông báo đăng ký thành công.

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 thêm một liên kết đến trang mà mỗi bài kiểm tra được thực hiện.

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>

Đây là trang đăng ký người dùng để xác minh. Nếu có lỗi, chỉ định không cho ASP-xác nhận-tóm tắt như một tham số để hiển thị nội dung của nó. Chúng tôi cũng đặt câu "lỗi trực tiếp nhập" trong thẻ div để xem nếu thông báo lỗi mặc định được hiển thị.

Mã khác không được thảo luận chi tiết bởi vì nó là mã được tự động tạo ra bởi giàn giáo dựa trên mô hình. (Một số người đã được cố định bằng tay, nhưng nó không có gì để làm với xác minh này.)

Có một thẻ span với thuộc tính ASP-Validation-for được đặt gần mỗi trường đầu vào (thẻ nhập). Đây là một thẻ (thuộc tính) để hiển thị thông báo lỗi cho mỗi trường nhập. Bất kể tham số được chỉ định trong ASP-xác nhận-tóm tắt, thông báo lỗi luôn hiển thị ở vị trí đó nếu có lỗi.

Ngoài ra, ASP-xác nhận-tóm tắt hiển thị kết quả xác nhận máy chủ, do đó, quá trình xác thực máy khách (_ValidationScriptsPartial) nhận xét.

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 trang chỉ trừ khi bạn chỉ định Modelchỉ để asp-xác nhận-tóm tắt. Văn bản Hiển thị giống như validatenone. cshtml nhìn trộm tại.

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 trang là gần như giống hệt nhau trừ chỉ định tất cả cho ASP-xác nhận-tóm tắt.

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>

@* 省略 *@

Kiểm tra hoạt động

Không

Sau khi bạn tạo chương trình, hãy thử kiểm tra hoạt động. ASP-xác nhận-summary =không màn hình.

Vì "lỗi nhập trực tiếp" được hiển thị ở trạng thái Hiển thị ban đầu, nó dường như không có thể được sử dụng như một thông báo lỗi mặc định. Có các thông số đã được thiết lập để bắt buộc, vì vậy chúng ta hãy tiếp tục thực hiện quá trình Cập Nhật.

Như tên của không, không có gì được hiển thị nếu có một lỗi. Thông báo lỗi mặc định vẫn còn nguyên vẹn, do đó, không có cơ hội để thiết lập không trực tiếp và sử dụng nó. Nếu bạn có một cơ hội để sử dụng nó, bạn có muốn tự động thiết lập các giá trị để asp-Validation-tóm tắt và không nếu bạn không muốn nhìn thấy một lỗi?

Không có

ASP-Validation-tóm tắt = màn hình vớiModelonly. Tôi nghĩ rằng có rất nhiều cảnh sử dụng nhất bởi vì nó đi ra trong mẫu của các lỗi xác minh và giàn giáo.

Kể từ khi các văn bản của "lỗi đầu vào trực tiếp" đã được đặt trong thẻ div không được hiển thị, có vẻ như là không có vấn đề ngay cả khi bạn đặt nó.

Nó là một trạng thái mà trong đó quá trình đăng ký được thực hiện và lỗi được hiển thị. Thông báo chỉ hiển thị ở đây là các thư mặc định đã được đặt trong thẻ div và thông báo lỗi xảy ra ở phía máy chủ. Lưu ý, Tuy nhiên, nếu bạn không có một thông báo khóa trống ở phía máy chủ, thư trong thẻ div sẽ không xuất hiện.

Phía máy chủ, hai thông báo lỗi được đặt, nhưng chỉ lỗi với các ký tự trống trong khoá được hiển thị. Nếu bạn chỉ định một khóa, nó sẽ được coi là một lỗi trong tài sản của mô hình với tên đó, vì vậy nó không xuất hiện trong ASP-xác nhận-tóm tắt. Thay vào đó, một thông báo xuất hiện ở bất kỳ thẻ nào có ASP-Validation-cho thuộc tính cùng tên.

Tất cả

ASP-xác nhận-tóm tắt =tất cả được chỉ định trên màn hình.

Đối với một số lý do, các văn bản của nhúng "lỗi trực tiếp đầu vào" được hiển thị. Tôi không chắc lý do tại sao tôi không nhìn thấy ModelOnly một mình. Có vẻ như là nhúng không thể được sử dụng trong tất cả cho thời gian được.

Nó là một màn hình sau khi quá trình Cập Nhật được thực hiện như nó được. Thông báo lỗi cho tất cả các trường nhập (thuộc tính) được hiển thị trong danh sách. Mỗi trường nhập liệu cũng hiển thị một thông báo lỗi, vì vậy nếu bạn muốn chỉ định tất cả để tóm tắt lỗi, Nó sẽ là tốt hơn để loại bỏ các ASP-xác nhận-cho thuộc tính thiết lập cho mỗi lĩnh vực đầu vào.

Thông báo lỗi thêm vào phía máy chủ cũng được hiển thị. Bạn cũng có thể thấy rằng bạn cũng đang xem một lỗi với phím.

Tóm tắt

ASP-xác nhận-tóm tắt có ba tham số. Bạn có thể muốn sử dụng ModelOnly để làm cho nó dễ dàng hơn để hiểu được nơi lỗi, hoặc để loại bỏ trùng lặp. Lưu ý rằng thông báo chỉ hiển thị trong ASP-Validation-tóm tắt là một thông báo với một khóa trống.

Nhân đây, bạn có thể thêm bao nhiêu tin nhắn như bạn muốn một khóa trống, vì vậy bạn không phải kết hợp các chuỗi để hiển thị nhiều tin nhắn.

Đối với tất cả, nếu bạn muốn thu thập thông báo lỗi ở một nơi, Đối với không, thiết lập tự động khi bạn không muốn một thông báo lỗi xuất hiện vì lý do nào. Nó là tốt để sử dụng nó cho mục đích của.