0
votes

Validation personnalisée côté client ne déclenche pas dans le noyau ASP.NET

J'ajoute un attribut de validation personnalisé à mon code et cela fonctionne parfaitement côté serveur. Cependant, sur le côté du client, la méthode et l'adaptateur sont enregistrés, mais la fonction de validation n'est jamais appelée.

Je travaille dans .NET CORE 2.2 à l'aide de MVC. J'ai supprimé le wrapper $ (document) .ReadAry Wrapper comme suggéré ailleurs et a vérifié que tous les casiers correspondent. P>

Ce qui suit est un MRE STRAND> P> P>

L'attribut de validation des tests: p> xxx pré>

Le modèle: xxx pré>

la vue: p> xxx pré>

la validation JS: p> xxx pré>

Le HTML généré: P>

<div class="form-group">
<form action="/" method="post">    <div class="row">
        <label for="TestValue">Test Value</label>
    </div>
    <div class="row">
        <input class="text-box single-line" data-val="true" data-val-testvalidation="Hello World! has been validated client side" data-val-testvalidation-name="Hello World!" id="TestValue" name="TestValue" type="text" value="" />
    </div>
    <div class="row">
        <span class="field-validation-valid" data-valmsg-for="TestValue" data-valmsg-replace="true"></span>
    </div>
    <div class="row">
        <input type="submit" value="Submit" />
    </div>
<input name="__RequestVerificationToken" type="hidden" value="" /></form></div>

        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebApplication1 - <a href="/Home/Privacy">Privacy</a>
        </div>
    </footer>


        <script src="/lib/jquery/dist/jquery.js"></script>
        <script src="/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>




    <script src="/lib/jquery-validation/dist/jquery.validate.js"></script>
    <script src="/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
    <script src="/js/testvalidation.js"></script>
    <script src="/js/site.js?v=4q1jwFhaPaZgr8WAUSrux6hAuh0XDg9kPS3xIVq36I0"></script>


3 commentaires

Pouvez-vous montrer le HTML généré dans votre vue?


@ Dennis1679 ajouté à la question. Merci.


Il s'agit d'un problème de la mise en œuvre de la validation des formulaires via des méthodes de validation non obstrissantes. Étiquettes éditées.


3 Réponses :


5
votes

J'ai créé un exemple de travail basé sur votre question et votre code. xxx xxx

Notez que, JQuery Validation enregistre ses règles avant que le DOM soit chargé. Si vous essayez d'enregistrer votre adaptateur après chargé DOM, vos règles ne seront pas traitées. Alors enveloppez-le dans une fonction d'exécution auto-exécutive. xxx

la bonne façon de charger les scripts serait xxx


4 commentaires

La seule différence que je vois consiste à ajouter l'adaptateur définissant les règles. J'ai changé mon code pour ajouter Nom: options.params ['nom'] et il n'appelle toujours jamais la fonction de validation. Est-ce que je manque une autre différence?


Oui, il y a ça. Je pense, avez-vous enveloppé le JavaScript dans une fonction d'exécution auto-exécutive? Parce que la validation de JQuery enregistre ses règles avant que le DOM soit chargé. Si vous essayez d'enregistrer votre adaptateur après chargé DOM, vos règles ne seront pas traitées. Je vais mettre à jour ma réponse aussi pour le refléter.


J'ai mis à jour ma réponse @lance. Laisse moi savoir les résultats.


J'ai enveloppé le JS dans une fonction d'exécution auto-exécutive et j'ai mis à jour ma question, mais la fonction n'est toujours pas déclenchée.



0
votes

Vous devez modifier options.params ['nom'] à options.params.name . Voici une solution de contournement simple comme ci-dessous: xxx

résultat: Entrez la description de l'image ici


0 commentaires

0
votes

Donc, il s'avère que mon problème n'était pas avec mon code, mais ma compréhension de la manière dont la validation allait fonctionner. Je m'attendais à ce qu'il foque sur Flou, mais cela ne tire pas avant de soumettre.


1 commentaires

Savez-vous comment puis-je faire déclencher la validation lorsque le champ de saisie est perdu?