web-dev-qa-db-fra.com

Comment utiliser html.ValidationMessageFor

J'essaie d'obtenir ma vue pour me donner le message d'erreur à côté de la zone de texte si un utilisateur entre quelque chose de non valide (comme une chaîne où il attend un nombre). Au lieu de cela, je reçois une page d'erreur laide indiquant que la validation a échoué lorsque l'utilisateur appuie sur soumettre.

Voici une partie de mon avis:

@model MembershipTest.ViewModels.AddDriverViewModel

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Add Drivers";
}

@using (Html.BeginForm("AddDriver", "Driver"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
<legend>Customer Information</legend>
 <table>
     <tr>
         <td>
             @Html.Label("First Name:")
             @Html.TextBoxFor(m => m.Driver.F_Name)
             @Html.ValidationMessageFor(m => m.Driver.F_Name)
         </td>
         <td>
             @Html.Label("Gender:")

             @Html.RadioButtonFor(m => m.isMaleChecked, "true") Male
             @Html.RadioButtonFor(m => m.isMaleChecked, "false")Female
         </td>
     </tr>
     <tr>
         <td>
             @Html.Label("Last Name:")
             @Html.TextBoxFor(m => m.Driver.L_Name)
             @Html.ValidationMessageFor(m => m.Driver.L_Name)
         </td>

Et voici la partie pertinente de mon modèle:

[Required]
[StringLength(30)]
public string F_Name { get; set; }

[Required]
[StringLength(30)]
public string L_Name { get; set; }

Dans la méthode de publication de mon contrôleur, je m'assure d'utiliser

if (ModelState.IsValid)

Si l'utilisateur saisit quelque chose comme 50 caractères de long dans la zone de texte du prénom, je veux qu'une erreur soit affichée en utilisant Html.ValidationMessageFor () juste lorsqu'ils tabulent hors de cette zone de texte, afin qu'ils puissent le voir avant d'appuyer sur soumettre. Suis-je en manque de jquery pour y arriver? Peut-être une déclaration d'utilisation que je dois inclure?

20
SantasNotReal

C'était idiot simple ..... Je n'ai tout simplement pas ajouté le champ ErrorMessage dans le cadre du décorateur [obligatoire]. Par exemple:

[Required(ErrorMessage = "First name is required")]
[StringLength(30, ErrorMessage = "Name can be no larger than 30 characters")]
public string F_Name { get; set; }

[Required(ErrorMessage = "Last name is required")]
[StringLength(30, ErrorMessage = "Name can be no larger than 30 characters")]
public string L_Name { get; set; }

Maintenant, si un utilisateur ne saisit rien dans les champs de nom ou entre quelque chose de plus de 30 caractères, la méthode Post n'est pas exécutée et l'utilisateur reçoit un petit message lui disant ce qui ne va pas.

39
SantasNotReal