Δείτε πώς λειτουργεί η σύνοψη επικύρωσης asp
Περιβάλλον
- Οπτικό στούντιο
-
- Visual Studio 2019
- πυρήνας ASP.NET
-
- 3.0
- 3.1
Στην αρχή
ASP.NET Υπάρχει ένας τρόπος για να χρησιμοποιήσετε asp-επικύρωση-περίληψη ως έναν τρόπο για να εμφανίσετε σφάλματα επικύρωσης εισόδου στην οθόνη στο Core. Δεν κατάλαβα πραγματικά τη διαφορά μεταξύ των παραμέτρων που θα μπορούσα να διευκρινίσω, γι 'αυτό ελέγχεται.
Υπάρχουν τρεις πιθανές τιμές:
- Κανένας
- Μοντέλο μόνο
- Όλα
Ως αποτέλεσμα της εξέτασης του τρόπου λειτουργίας κάθε μιας από αυτές τις διαφορές, το αποτέλεσμα έχει ως εξής:
Προπαρασκευή
Προς το παρόν, θα προετοιμαστούμε για την επιχείρηση. Τα περισσότερα από αυτά είναι περιττά, οπότε αν θέλετε μόνο να δείτε τα αποτελέσματα, δείτε το δεύτερο μισό του άρθρου.
Αυτή η επικύρωση προϋποθέτει ότι θέλετε να καταχωρήσετε το χρήστη στη φόρμα, επομένως θα δημιουργήσουμε ένα μοντέλο προβολής για το χρήστη. Έβαλα διάφορα στοιχεία, αλλά το περιεχόμενο δεν έχει σημασία τίποτα, διότι είναι δυνατόν να εξακριβωθεί αν υπάρχει τουλάχιστον ένα. Θα ελέγξουμε με DataAnnotation, έτσι θα ορίσετε τα απαιτούμενα και StringLength χαρακτηριστικά. Για να δω τη διαφορά στη συμπεριφορά, έβαλα ένα επιπλέον IsAccepted.
** Μοντέλα/Μοντέλο προβολής χρήστη **
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 είναι μια πλευρική αλυσίδα κειμένου προβολής, τα περιεχόμενα κάθε ενέργειας είναι όλα στον ίδιο κώδικα εκτός από τα μηνύματα.
Εάν δεν είναι δυνατή η αποδοχή του 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-επικύρωσης ως παράμετρο για την εμφάνιση των περιεχομένων της. Επίσης, τοποθετήσαμε την πρόταση "Error Direct Entry" στην ετικέτα div για να δούμε αν εμφανίζεται το προεπιλεγμένο μήνυμα λάθους.
Άλλος κώδικας δεν συζητείται λεπτομερώς επειδή είναι ο κώδικας που δημιουργήθηκε αυτόματα από τις σκαλωσιές βασισμένες στο πρότυπο. (Ορισμένα από αυτά έχουν καθοριστεί με το χέρι, αλλά δεν έχει καμία σχέση με αυτή την επαλήθευση.)
Υπάρχει μια ετικέτα span με το σύνολο χαρακτηριστικών asp-validation-for κοντά σε κάθε πεδίο εισόδου (ετικέτα εισόδου). Αυτό είναι ένα tag (χαρακτηριστικό) για την εμφάνιση μηνυμάτων σφάλματος για κάθε πεδίο εισόδου. Ανεξάρτητα από την παράμετρο που καθορίζεται στη σύνοψη 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-επικύρωση-σύνοψη. Το εμφανιζόμενο κείμενο είναι το ίδιο με το κείμενο validateNone.cshtml που κρυφοκοιτάζει.
ΕπικύρωσηmodelOnly.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.
Επικύρωση Όλα τα.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-validation-summary και καμία, εάν δεν θέλετε να δείτε ένα σφάλμα;
Μοντέλο μόνο
Asp-επικύρωση-περίληψη= Η οθόνη μεModelOnly. Νομίζω ότι υπάρχουν πολλές σκηνές χρήσης πιο επειδή βγαίνει στο δείγμα του σφάλματος επαλήθευσης και σκαλωσιές.
Δεδομένου ότι το κείμενο του "Σφάλμα άμεσης εισόδου" που τοποθετήθηκε στην ετικέτα div δεν εμφανίζεται, φαίνεται ότι δεν υπάρχει κανένα πρόβλημα, ακόμη και αν το βάλετε.
Είναι μια κατάσταση στην οποία εκτελείται η διαδικασία εγγραφής και εμφανίζεται το σφάλμα. Τα μόνα μηνύματα που εμφανίζονται εδώ είναι τα προεπιλεγμένα μηνύματα που είχαν τοποθετηθεί προηγουμένως στην ετικέτα div και τα μηνύματα λάθους που παρουσιάστηκαν στην πλευρά του διακομιστή. Σημειώστε, ωστόσο, ότι εάν δεν έχετε ένα κενό μήνυμα κλειδιού στην πλευρά του διακομιστή, το μήνυμα στο tag div δεν θα εμφανιστεί.
Από την πλευρά του διακομιστή, τοποθετούνται δύο μηνύματα σφάλματος, αλλά εμφανίζεται μόνο το σφάλμα με κενούς χαρακτήρες στο κλειδί. Εάν καθορίσετε ένα κλειδί, θα αντιμετωπιστεί ως σφάλμα στην ιδιότητα του μοντέλου με αυτό το όνομα, επομένως δεν εμφανίζεται στη σύνοψη asp-επικύρωσης. Αντίθετα, εμφανίζεται ένα μήνυμα σε οποιοδήποτε tag με το χαρακτηριστικό asp-validation-for του ίδιου ονόματος.
Όλα
Asp-επικύρωση-περίληψη=Όλα καθορίζονται στην οθόνη.
Για κάποιο λόγο, εμφανίζεται το κείμενο της ενσωματωμένης "άμεσης εισόδου σφάλματος". Δεν είμαι σίγουρος γιατί δεν βλέπω το ModelOnly μόνος. Φαίνεται ότι η ενσωμάτωση δεν μπορεί να χρησιμοποιηθεί σε όλα προς το παρόν.
Είναι μια οθόνη μετά την εκτέλεση της διαδικασίας ενημέρωσης ως έχει. Τα μηνύματα σφάλματος για όλα τα πεδία εισόδου (ιδιότητες) εμφανίζονται σε μια λίστα. Κάθε πεδίο εισόδου εμφανίζει επίσης ένα μήνυμα σφάλματος, επομένως, εάν θέλετε να καθορίσετε όλα για να συνοψίσετε το σφάλμα, Θα ήταν καλύτερα να καταργήσετε το σύνολο χαρακτηριστικών asp-validation-for για κάθε πεδίο εισόδου.
Εμφανίζονται επίσης μηνύματα λάθους που προστίθενται στην πλευρά του διακομιστή. Μπορείτε επίσης να δείτε ότι προβάλλετε επίσης ένα σφάλμα με το κλειδί.
Περίληψη
Η σύνοψη επικύρωσης ASP είχε τρεις παραμέτρους. Μπορεί να θέλετε να χρησιμοποιήσετε το ModelOnly για να διευκολύνετε την κατανόηση της θέσης του σφάλματος ή την εξάλειψη της αναπαραγωγής. Σημειώστε ότι το μόνο μήνυμα που εμφανίζεται στη σύνοψη asp-επικύρωσης είναι ένα μήνυμα με κενό κλειδί.
Παρεμπιπτόντως, μπορείτε να προσθέσετε όσα μηνύματα θέλετε σε ένα κενό κλειδί, ώστε να μην χρειάζεται να συνδυάσετε συμβολοσειρές για να εμφανίσετε πολλά μηνύματα.
Για όλους, αν θέλετε να συλλέξετε μηνύματα σφάλματος σε ένα σημείο, Για το none, ορίστε δυναμικά όταν δεν θέλετε να εμφανίζεται ένα μήνυμα σφάλματος για οποιονδήποτε λόγο. Είναι καλό να το χρησιμοποιήσετε για τους σκοπούς της.