La validation MVC4 ne fonctionne pas

J’ai simple application 1 page pour envoyer un email aux utilisateurs. J’ai 3 champs pour le nom, l’email et le numéro de téléphone. Le code semble fonctionner avec le bouton de saisie, avec validation des validations et envoi du message d’erreur approprié. Mais je suis plus enclin à utiliser la balise anchor (ActionLink) pour mon interface utilisateur. Les données sont toujours publiées lorsque je clique sur la balise d’ancrage (à l’aide de jQuery), mais les validations ne se déclenchent pas. Y a-t-il quelque chose qui me manque ou une meilleure façon de le faire?

J’ai utilisé ce post comme référence.

Modèle

public class Contact { [Required(ErrorMessage = "Name is required")] public ssortingng Name { get; set; } [Required(ErrorMessage = "Email is required")] public ssortingng Email { get; set; } [Required(ErrorMessage = "Phone is required")] public ssortingng PhoneNumber { get; set; } } 

Vue

  
@Html.TextBoxFor(model => model.Name, new { @class = "form-control", placeholder="Name" }) @Html.ValidationMessageFor(model=>model.Name)
@Html.TextBoxFor(model => model.Email, new { @class = "form-control", placeholder="Email" }) @Html.ValidationMessageFor(model=>model.Email)
@Html.TextBoxFor(model => model.PhoneNumber, new { @class = "form-control", placeholder="Phone" }) @Html.ValidationMessageFor(model=>model.PhoneNumber)
@Html.ActionLink("I want free advice", "designerhome")
$(function () { $('.btn').click(function (e) { $.post("/campaign/designerhome", { Name: $("#Name").val(), Email: $("#Email").val(), PhoneNumber: $("#Phone").val() }, function (result) { //do whatever with the response if (result.status == true) { alert('Email submitted successfully'); } });//end of post });//end of click });

Manette

 [HttpPost] public ActionResult designerhome(Contact contact) { if (ModelState.IsValid) { } return View("Advert1"); } 

Nous avons quelques raisons pour lesquelles la validation ne fonctionne pas

1. Vérifiez les parameters d’application dans la configuration Web.

    

Les deux doivent être vrais si vous voulez exécuter la validation côté client.

2. Dans votre code, vous n’utilisez pas la balise Form telle qu’elle est affichée dans la question

La balise de formulaire est indispensable pour la validation

3. Jquery n’est pas correctement référencé sur la page de présentation

veuillez vérifier les références suivantes sur votre page de mise en page

 jquery.unobtrusive*.js jquery.validate*.js 

J’espère que cela vous aidera.

Je forcerais la validation dans votre gestionnaire de click , comme jQuery semble le faire uniquement pour la soumission automatique du formulaire (et non pour le post() manuel post() vous effectuez):

 $('.btn').click(function (e) { if ($('#YourFormIdHere').valid()) { // Will force validation $.post(...); } }); 

En tant que votre demande Ajax à l’ Action , vos validations ne seront pas reflétées car la vue ne sera pas rendue à nouveau . Pour restr sur la même piste, vous pouvez retourner le JSON comme

 return Json(new {Valid = validState, Errors = Get Errors FromModel State, }); 

puis repeupler en utilisant le JavaScript.

Une autre solution pourrait consister à créer des aides personnalisées qui feront une demande POST à ​​l’action souhaitée. La référence du code pour la même chose est ici .

Et enfin, vous pouvez créer un bouton HTML et faire une demande POST.

Donnez simplement à votre bouton de saisie l’apparence d’un lien avec le code CSS suivant:

 input[type=submit] { background:none!important; border:none; padding:0!important; color:#069; text-decoration:underline; cursor:pointer; }