2010-07-29 16 views
1

J'espère que quelqu'un a rencontré quelque chose de similaire. Une entrée de texte avec le texte déclenche le message d'erreur [Obligatoire] côté client.Validation de client MVC provoquant de fausses erreurs

Je donne les résultats suivants inclus dans le maître:

<script src="/Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script src="/Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script> 

ainsi que d'avoir

<% Html.EnableClientValidation(); %> 

dans la vue.

Quelques facteurs possibles:

  • La forme est une vue partielle
  • Le texte soumis vient CKEditor
  • Le CKEditor est caché sur la charge de page, puis révélé par jQuery

Je ne suis pas sûr de ce qui pourrait causer cela.

Forme:

<form action="/Quote/Create/1" id="form0" method="post"><div class="validation-summary-valid" id="validationSummary"><ul><li style="display:none"></li> 

</ul></div> 
<fieldset> 
    <legend>Fields</legend> 
    <div class="editor-field"> 
     <input id="QuoteID" name="QuoteID" type="hidden" value="0" /> 
    </div> 
    <div class="editor-field"> 
     <input id="UserID" name="UserID" type="hidden" value="54cb0fde-649d-429c-8800-6bd9cc286d90" /> 
    </div> 

     <div class="editor-label"> 
     <label for="PageNumber">PageNumber</label> 
    </div> 
    <div class="editor-field"> 
     <input id="PageNumber" name="PageNumber" type="text" value="" /> 
     <span class="field-validation-valid" id="PageNumber_validationMessage"></span> 
    </div> 
    <div class="editor-label"> 

     <label for="QuoteText">QuoteText</label> 
    </div> 
    <div class="editor-field"> 
     <textarea cols="20" id="QuoteText" name="QuoteText" rows="2"> 
</textarea> 
     <span class="field-validation-valid" id="QuoteText_validationMessage"></span> 
    </div> 
    <div class="editor-field"> 
     <input id="BookID" name="BookID" type="hidden" value="1" /> 

    </div> 
    <div class="editor-field"> 
     <input id="DateCreated" name="DateCreated" type="hidden" value="7/28/2010 9:21:36 PM" /> 
    </div> 
    <p> 
     <input id="quoteSubmit" type="submit" value="Create" /> 
    </p> 
</fieldset> 
</form><script type="text/javascript"> 
//<![CDATA[ 
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } 
window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"PageNumber","ReplaceValidationMessageContents":true,"ValidationMessageId":"PageNumber_validationMessage","ValidationRules":[{"ErrorMessage":"The field PageNumber must be a number.","ValidationParameters":{},"ValidationType":"number"}]},{"FieldName":"QuoteText","ReplaceValidationMessageContents":true,"ValidationMessageId":"QuoteText_validationMessage","ValidationRules":[{"ErrorMessage":"That quote is too long.","ValidationParameters":{"minimumLength":0,"maximumLength":500},"ValidationType":"stringLength"},{"ErrorMessage":"You didn\u0027t even enter a quote...","ValidationParameters":{},"ValidationType":"required"}]}],"FormId":"form0","ReplaceValidationSummary":false,"ValidationSummaryId":"validationSummary"}); 
//]]> 
</script> 

Quand je prends le

<% Html.EnableClientValidation(); %> 
validation côté serveur

fonctionne très bien et génère aucune erreur.

+0

Pouvez-vous s'il vous plaît poster le code de formulaire? –

+0

Code de formulaire ajouté. – asfsadf

+0

J'ai eu exactement le même problème ... Et je ne pouvais pas le résoudre du côté client. Le problème est en quelque sorte que CKeditor ne synchronise pas le contect de l'éditeur avec la zone de texte que la validation vérifie avant que la validation du client ne soit déclenchée. J'ai essayé de synchroniser sur les événements blur ou forceBlur mais ça n'a pas fonctionné non plus ... Donc j'ai fini par le faire valider uniquement côté serveur. Si vous avez une solution, postez-la. :) – apolka

Répondre

1

Je l'ai compris!

$ ('# quoteSubmit') cliquez sur (function() { de CKEDITOR.instances [ 'QuoteText'] updateElement();}. ).;

Yeehaw.