MVC4: jQuery Validation Discrète Natif de travail de manière incorrecte
Mon MVC4 web app est construit sur Umbraco 7. J'ai installé la suite de packages nuget:
jQuery 1.10.2
jQuery.Validation 1.11.1
jQuery.Validation.Unobtrusive.Native.MVC4 1.1.0.0
La discrète de validation est à partir de ce site web: http://jqueryvalidationunobtrusivenative.azurewebsites.net/Home/GettingStarted
Mon point de vue, ressemble à ceci:
<form id="frmContact" method="post" action="@Url.Action("ContactForm", "ContactFormSurface")">
<div>
<label>Full Name</label>
@Html.TextBoxFor(m => m.FullName, true)
@Html.ValidationMessageFor(m => m.FullName, "*")
</div>
<div>
<label>Company</label>
@Html.TextBoxFor(m => m.Company, true)
@Html.ValidationMessageFor(m => m.Company, "*")
</div>
<div>
<label>Email Address</label>
@Html.TextBoxFor(m => m.EmailAddress, true)
@Html.ValidationMessageFor(m => m.EmailAddress, "*")
</div>
<div>
<label>Message @Html.ValidationMessageFor(m => m.Message, "*")</label>
@Html.TextAreaFor(m => m.Message, true, 10, 30, new { @class = "input-xl" })
</div>
@Html.ValidationSummary(false, "Please correct the following errors before submitting the message")
<div>
<button type="submit">Send</button>
</div>
</form>
Dans le web.config:
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
Mon modèle:
public class ContactFormViewModel
{
[Required, Display(Name = "Full Name")]
public string FullName { get; set; }
public string Company { get; set; }
[Required, Display(Name = "Email Address")]
[RegularExpression(@"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$", ErrorMessage="Not a valid email address")]
public string EmailAddress { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string Message { get; set; }
}
Voici les scripts (qui me l'ont confirmé charge correctement dans le navigateur)
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js"></script>
Le rendu HTML ressemble à ceci (au chargement initial de la page):
<form action="/umbraco/Surface/ContactFormSurface/ContactForm" method="post" id="frmContact">
<div>
<label>Full Name</label>
<input type="text" value="" name="FullName" id="FullName" data-rule-required="true" data-msg-required="The Full Name field is required." class="input-validation-error">
<span data-valmsg-replace="false" data-valmsg-for="FullName" class="field-validation-error">*</span>
</div>
<div>
<label>Company</label>
<input type="text" value="" name="Company" id="Company">
<span data-valmsg-replace="false" data-valmsg-for="Company" class="field-validation-valid">*</span>
</div>
<div>
<label>Email Address</label>
<input type="text" value="" name="EmailAddress" id="EmailAddress" data-rule-required="true" data-rule-regex="{"pattern":"^(?!\\.)(\"([^\"\\r\\\\]|\\\\[\"\\r\\\\])*\"|([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\\.)\\.)*)(?<!\\.)@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$"}" data-msg-required="The Email Address field is required." data-msg-regex="Not a valid email address" class="input-validation-error">
<span data-valmsg-replace="false" data-valmsg-for="EmailAddress" class="field-validation-error">*</span>
</div>
<div>
<label>Message <span data-valmsg-replace="false" data-valmsg-for="Message" class="field-validation-error">*</span></label>
<textarea rows="10" name="Message" id="Message" data-rule-required="true" data-msg-required="The Message field is required." cols="30" class="input-validation-error input-xl"></textarea>
</div>
<div data-valmsg-summary="true" class="validation-summary-errors"><span>Please correct the following errors before submitting the message</span>
<ul>
<li>The Full Name field is required.</li>
<li>The Email Address field is required.</li>
<li>The Message field is required.</li>
</ul>
</div>
<div>
<button type="submit">Send</button>
</div>
</form>
Comme vous pouvez le voir, le texte de validation est déjà à un état non valide au moment du chargement (avant tout des combinaisons de touches ou les soumissions de formulaire). Aussi, au moment de soumettre le formulaire vide, il soumet à nouveau sur le serveur, de sorte que la validation côté client n'est pas réellement se produire. JQuery validation à l'exécution des scripts, puisque la société champ n'est pas obligatoire et se reflète donc dans le message de validation de l'attribut de classe ('field-validation-valid'
)
MODIFIER:
Contrôleur de code de demande:
public class ContactFormSurfaceController: Umbraco.Web.Mvc.SurfaceController
{
[HttpGet]
public ActionResult ContactForm(ContactFormViewModel model)
{
return PartialView("ContactForm", new ContactFormViewModel());
}
}
Quelqu'un peut-il m'aider ici? Merci à l'avance.
inspectez votre navigateur et laissez-moi savoir est-il une erreur de javascript ou jquery
bien sûr, je l'ai incluse dans le poste.
À l'aide de FireBug, aucune erreur n'est détectée.
Est
@Html.ValidationMessageFor()
toujours nécessaire?
OriginalL'auteur hofnarwillie | 2014-01-10
Vous devez vous connecter pour publier un commentaire.
Avec cette nouvelle Natif Discrète de validation, vous semblez avoir à appeler
.validate()
sur le formulaire manuellement.De la Date Démo Exemple:
Ou plus simplement des exemples:
Je n'ai aucune expérience de ce type, mais puisque ce n'utilise le Plugin jQuery Validation, la La Documentation pourrait être intéressant à lire.
Ce ŒUVRES avec votre code HTML généré:
Voir ces violons pour référence:
http://jsfiddle.net/4JE62/
http://jsfiddle.net/4JE62/1/
Je pense que ce sont alerady partie du jQuery.La Validation.Discrète.Native.MVC4 package nuget.
HAHAHA vrai. Je n'ai aucune expérience avec les autochtones, la suppression de ma réponse.
De se! Une combinaison de toutes vos suggestions utiles ainsi que l'évolution de la
$("form").validate();
ligne$("#formId").validate();
. Pour une raison de multiples formes sur les sauts de page. jsfiddle.net/4JE62/3 Merci pour l'aideSalut les Gars, je voulais Juste vous faire savoir que la documentation a migré vers GitHub pages maintenant: johnnyreilly.github.io/jQuery.La Validation.Discrète.Natif
OriginalL'auteur SoonDead
ne pas utiliser de valider(), utilisez valide() à la place
N'oubliez pas d'inclure validate.unobtrusive.js dans votre page
validate()
est la fonction correcte (pasvalid()
) il avait tout simplement un problème quand il y avait deux formes sur la page, donc mon sélecteur jQuery trouvés à la fois, au lieu de juste celui que je suis en train de valider.Je ne sais pas, en fait je vais à cette page parce que j'essaie de résoudre mes problèmes lors de l'appel de valider() et ça ne marche pas. et après que. j'ai trouver la solution et vous voulez juste pour partager. Peut-être mon jquery, c'est la différence de la version avec vous
Effectivement sa confusion juste pour les autres, si quelqu'un est d'arrêter le formulaire sur appel ajax utilisation de la validité de la méthode et de valider la méthode doit être appelée sur le document de prêt.
OriginalL'auteur Grey Wolf