ראה כיצד פועל סיכום אימות-asp

עודכן דף :
תאריך יצירת דף :

סביבה

ויז סטודיו
  • ויז סטודיו 2019
ASP.NET ליבה
  • 3.0
  • 3.1

. בהתחלה

ASP.NET יש דרך להשתמש בסיכום אימות asp-תקציר כדרך להציג שגיאות אימות קלט על המסך ב-Core. אני לא ממש הבנתי את ההבדל בין הפרמטרים שאני יכול לציין, אז בדקתי את זה.

קיימים שלושה ערכים אפשריים:

  • לא
  • מודלים בלבד
  • כל

כתוצאה מבדיקת האופן שבו כל אחד מההבדלים הללו פועל, התוצאה היא כדלקמן:

טרום ההכנה

. לעת עתה, אנחנו נתכונן לניתוח רובם מיותרים, כך שאם אתה רק רוצה לראות את התוצאות, עיין במחצית השניה של המאמר.

אימות זה מניח שברצונך לרשום את המשתמש בטופס, ולכן ניצור מודל תצוגה עבור המשתמש. שמתי פריטים שונים, אבל התוכן לא משנה כלום, כי אפשר לוודא אם יש לפחות אחד. אנו נבדוק עם הביאור נתונים, כך שנקבע את התכונות ' נדרש ' ו'אורך אפס '. , כדי לראות את ההבדל בהתנהגות. אני רק מכניס עוד משהו מקובל

* * מודלים/הצפלמודלים * *

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 מוסיף קישור לדף שבו כל בדיקה מתבצעת.

אינדקס. 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>

זהו דף רישום המשתמש לצורך אימות. אם קיימת שגיאה, ציין ' ללא ' ב-אימות asp-סיכום כפרמטר להצגת תוכנו. אנו מכניסים גם את המשפט "כניסה ישירה של שגיאה" בתג div כדי לראות אם הודעת השגיאה המהווה ברירת מחדל מוצגת.

קוד אחר אינו נדון בפרוטרוט מאחר שזהו הקוד שנוצר באופן אוטומטי על-ידי פיגומים המבוססים על המודל. (חלק מהם תוקנו ביד, אבל זה לא קשור לאימות זה.)

יש תג טווח עם אימות asp-עבור תכונה שנקבעה ליד כל שדה קלט (תג קלט). זהו תג (תכונה) להצגת הודעות שגיאה עבור כל שדה קלט. ללא קשר לפרמטר שצוין ב-asp-אימות-סיכום, הודעת שגיאה מוצגת תמיד במיקום זה אם קיימת שגיאה.

בנוסף, אימות asp-תקציר מציג את תוצאות אימות השרת, כך שתהליך אימות הלקוח (_ValidationScriptsPartial) מתגלה.

ואליד1. 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-תקציר. טקסט התצוגה זהה ל-ואליטאנ1. 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>

@* 省略 *@

כולם. cshtml דפים זהים כמעט למעט לציון כל עבור אימות asp-תקציר.

ואליתאריהכל. 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-אימות-תקציר =הכל מצוין על המסך.

מסיבה כלשהי, מוצג הטקסט של "קלט ישיר השגיאה המוטבע". אני לא בטוח למה אני לא. רואה מודלים רק לבד נראה כי הטבעה לא ניתן להשתמש ב-All לעת עתה.

זהו מסך לאחר תהליך העדכון מבוצע כפי שהוא. הודעות שגיאה עבור כל שדות הקלט (מאפיינים) מוצגות ברשימה. כל שדה קלט מציג גם הודעת שגיאה, כך שאם ברצונך לציין הכל כדי לסכם את השגיאה, עדיף להסיר את אימות ה-asp-עבור התכונה שנקבעה עבור כל שדה קלט.

הודעות שגיאה שנוספו בצד השרת מוצגות גם הן. כמו כן, באפשרותך לראות שאתה מציג שגיאה באמצעות המפתח.

סיכום

אימות Asp-לסיכום היו שלושה פרמטרים. ייתכן שתרצה להשתמש באפשרות מודלים בלבד כדי להקל על ההבנה של היכן השגיאה, או כדי למנוע כפילות. שים לב שההודעה היחידה המוצגת ב-asp-אימות-סיכום היא הודעה בעלת מפתח ריק.

דרך אגב, באפשרותך להוסיף מספר רב של הודעות ככל שתרצה למפתח ריק, כך שאינך צריך לשלב מחרוזות כדי להציג הודעות מרובות.

עבור All, אם ברצונך לאסוף הודעות שגיאה במקום אחד, עבור None, הגדר באופן דינאמי כאשר אין ברצונך שהודעת שגיאה תופיע מסיבה כלשהי. טוב להשתמש בו למטרת.