web-dev-qa-db-fra.com

MVC: comment activer la validation côté client sur les champs masqués

@ Scripts

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

@ Voir

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="display:none"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}

CE QUE j'ai essayé

  1. Remplacé ignore: ": caché", par ignore: "" , dans validate.js
  2. var validateMeta = $ ('# form123'). validate (); validateMeta.settings.ignore = "";

  3. $.validator.setDefaults({ignore: ""});

  4. $.validator.setDefaults({ ignore: [] });

22
RollerCosta

J'ai rencontré ce même problème. Un champ masqué sur une page stockait un ID utilisateur, qui a été sélectionné dans une zone de texte de saisie semi-automatique. Cet ID a été validé pour garantir qu'un identifiant différent de zéro a été renvoyé. Nous voulions inclure cette validation dans le côté client.

Par défaut, jQuery validate ignore les champs cachés, les éléments avec une largeur et une hauteur nulles, ceux avec l'affichage CSS: aucun et tous les éléments avec un parent invisible (en utilisant les mêmes critères).

Le paramètre ignorer peut cependant être remplacé en ajoutant le script suivant (je viens de l'ajouter à mon script de validateur personnalisé avant d'appeler $ .validator.addMethod ()):

// By default validator ignores hidden fields.
// change the setting here to ignore nothing
$.validator.setDefaults({ ignore: null });

REMARQUE: Ce code ne fonctionnera pas s'il est exécuté à l'intérieur de la méthode document ready Ou jQuery $(function () {}).

43
Robin Hames

Juste après avoir inséré le script pour la validation, définissez l'ignorer sur "":

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
    $.validator.setDefaults({
        ignore: ""
    });
    </script>
}
12
IonutC

essayer

 var validator = $("#form-id").data('validator');
 validator.settings.ignore = "";
7
Mr.LamYahoo

Je ne sais pas pourquoi avez-vous besoin d'afficher les validations pour les champs que l'utilisateur ne peut pas voir ou modifier. Mais vous pouvez essayer ça. Au lieu de display:none, appliquer visibility:hidden et height:0 dans votre champ de saisie.

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="visibility:hidden;height:0"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}
5
sanjeev