انظر كيفية عمل ملخص المصادقة

تحديث الصفحة :
تاريخ إنشاء الصفحة :

البيئه

استوديو مرئي
  • ستوديو مرئي 2019
ASP.NET الأساسية
  • 3.0
  • 3.1

في البداية

ASP.NET هناك طريقة لاستخدام ملخص التحقق من صحة asp كطريقة لعرض أخطاء التحقق من صحة الإدخال على الشاشة في الأساسية. لم أكن أفهم حقا الفرق بين المعلمات التي يمكن أن تحدد ، لذلك راجعت ذلك.

هناك ثلاث قيم محتملة:

  • اي
  • نموذج فقط
  • جميع

ونتيجة لدراسة كيفية عمل كل من هذه الاختلافات، تكون النتيجة كما يلي:

الإعداد المسبق

في الوقت الحالي، سنستعد للعملية. معظمها زائدة عن الحاجة ، لذلك إذا كنت ترغب فقط في رؤية النتائج ، راجع النصف الثاني من المقالة.

يفترض التحقق من الصحة هذا أنك تريد تسجيل المستخدم في النموذج، لذلك سنقوم بإنشاء نموذج عرض للمستخدم. أضع بنود مختلفة، ولكن محتويات لا يهم أي شيء لأنه من الممكن للتحقق مما إذا كان هناك واحد على الأقل. سوف نتحقق مع DataAnnotation، لذلك سنقوم بتعيين المطلوبة وSlength السمات. لرؤية الفرق في السلوك ، أنا وضعت فقط في 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-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>

هذه هي صفحة تسجيل المستخدم للتحقق. إذا كان هناك خطأ، حدد بلا لملخص التحقق من صحة asp كمعلمة لعرض محتوياته. نحن أيضا وضع الجملة "الدخول المباشر الخطأ" في علامة div لمعرفة ما إذا كان يتم عرض رسالة الخطأ الافتراضية.

لا تتم مناقشة التعليمات البرمجية الأخرى بالتفصيل لأنها هي التعليمات البرمجية التي تم إنشاؤها تلقائيًا بواسطة السقالات استنادًا إلى الطراز. (تم إصلاح بعضها باليد، ولكن لا علاقة لها بهذا التحقق).)

هناك علامة تمتد مع تعيين السمة asp-validation-for بالقرب من كل حقل إدخال (علامة الإدخال). هذه علامة (سمة) لعرض رسائل الخطأ لكل حقل إدخال. بغض النظر عن المعلمة المحددة في ملخص التحقق من صحة 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");}
}*@

صفحات ValidateModelOnly.cshtml فقط إلا إذا قمت بتحديد ModelOnly لـ asp-validate-summary. نص العرض هو نفس validateNone.cshtml peeking في.

التحقق من صحة نموذجOnly.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-validate-summary.

التحقق من صحة كافة.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-التحقق من صحة-الملخص =بلا شاشة.

منذ "خطأ الإدخال المباشر" يتم عرض في حالة العرض الأولي، يبدو أنه لا يمكن استخدامها كرسالة خطأ افتراضية. هناك معلمات تم تعيينها إلى "مطلوب"، لذا دعنا نواصل تنفيذ عملية التحديث.

كما اسم بلا، يتم عرض أي شيء إذا كان هناك خطأ. تبقى رسالة الخطأ الافتراضية سليمة، لذلك هناك احتمال فرصة لتعيين بلا مباشرة واستخدامها. إذا كان لديك فرصة لاستخدامها، هل تريد تعيين القيمة بشكل حيوي إلى ملخص المصادقة على asp و لا شيء إذا كنت لا تريد أن ترى خطأ؟

نموذج فقط

Asp-validation-summary = الشاشة معModelOnly. أعتقد أن هناك الكثير من المشاهد استخدام معظم لأنه يخرج في عينة من خطأ التحقق والسقالات.

منذ لا يتم عرض نص "خطأ الإدخال المباشر" التي تم وضعها في علامة div، يبدو أنه لا توجد مشكلة حتى لو كنت وضعه.

وهي حالة يتم فيها تنفيذ عملية التسجيل ويتم عرض الخطأ. الرسائل الوحيدة المعروضة هنا هي الرسائل الافتراضية التي تم وضعها مسبقاً في علامة div ورسائل الخطأ التي حدثت على جانب الملقم. لاحظ، ومع ذلك، إذا لم يكن لديك رسالة مفتاح فارغة على جانب الملقم، لن تظهر الرسالة في علامة div.

على جانب الملقم يتم وضع رسائل خطأ جهازي ولكن يتم عرض الخطأ فقط مع الأحرف الفارغة في المفتاح. إذا قمت بتحديد مفتاح، سيتم معاملته كخطأ في خاصية الطراز بهذا الاسم، بحيث لا يظهر في ملخص التحقق من صحة asp. بدلاً من ذلك، تظهر رسالة في أي علامة مع السمة asp-validation-for الذي يحمل نفس الاسم.

جميع

Asp-validation-summary = تم تحديدالكل على الشاشة.

لسبب ما، يتم عرض النص المضمن "خطأ الإدخال المباشر". لست متأكدا لماذا لا أرى ModelOnly وحدها. يبدو أن التضمين لا يمكن استخدامها في الكل في الوقت الحاضر.

وهي شاشة بعد تنفيذ عملية التحديث كما هي. يتم عرض رسائل الخطأ لكافة حقول الإدخال (خصائص) في قائمة. يعرض كل حقل إدخال رسالة خطأ، لذا إذا كنت تريد تحديد الكل لتلخيص الخطأ، سيكون من الأفضل إزالة تعيين سمة التحقق من صحة asp لكل حقل إدخال.

يتم أيضاً عرض رسائل الخطأ المضافة على جانب الملقم. يمكنك أيضاً مشاهدة أنك تقوم بعرض خطأ بالمفتاح.

موجز

Asp-التحقق من صحة الملخص لديها ثلاثة معلمات. قد تحتاج إلى استخدام ModelOnly لتسهيل فهم حيث الخطأ أو لإزالة التكرار. لاحظ أن الرسالة فقط المعروضة في ملخص التحقق من صحة asp هي رسالة بمفتاح فارغ.

بالمناسبة، يمكنك إضافة عدد الرسائل التي تريدها إلى مفتاح فارغ، بحيث لا تحتاج إلى دمج سلاسل لعرض عدة رسائل.

لللجميع، إذا كنت ترغب في جمع رسائل خطأ في مكان واحد، بلا، تعيين بشكل حيوي عندما لا تريد رسالة خطأ تظهر لأي سبب. من الجيد استخدامه لغرض.