La validation côté client discrète dans MVC4 ne fonctionne pas
J'ai mise en page avec tous les scripts comme indiqué ci-dessous.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Site</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<some custom css>
<modernizr>
<script src="~/Scripts/Jquery/jquery-1.9.1.js"></script>
<script src="~/Scripts/Jquery/jquery-ui-1.10.2.js"></script>
<script src="~/Scripts/Jquery/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/Jquery/jquery.validate.js"></script>
<script src="~/Scripts/Jquery/jquery.validate.unobtrusive.js"></script>
<some custom scripts>
<bootstrap scripts>
<knockout scripts>
</head>
<body>
@RenderBody()
</body>
</html>
Ensuite, j'ai mon Formulaire d'inscription comme indiqué
@model Mysite.Models.Account.Account
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "register" }))
{
@Html.AntiForgeryToken();
<h1>Login</h1>
@Html.ValidationSummary();
@Html.EditorFor(m => m.Name)
@Html.EditorFor(m => m.Address1)
@Html.EditorFor(m => m.Address2)
@Html.EditorFor(m => m.Phone1)
<input type="button" value="Register" id="btn1" />
}
<script>
var form = $("#register");
$("#btn1").click(function (e) {
e.preventDefault();
$.ajax({
url: 'http://localhost:3885/Account/Register',
data: form.serialize(),
type: 'POST',
success: function (result) {},
error: function (req, status, error) {
function(req, status, error);
}
});
});
</script>
Mon Compte de la classe du Modèle est le suivant :
public class Account
{
public Name name {get; set;}
public Address Address1 {get; set;}
public Address Address2 {get; set;}
public Phone Phone1 {get;set;}
}
où chaque Propriété est également un modèle de classe avec sa propre EditorTemplates par exemple
public class Name
{
[Required]
public string FirstName {get; set;}
public string MiddleName {get; set;}
[Required]
public string LastName {get; set;}
}
et avoir un Nom.cshtml EditorTemplate comme ci-dessous
<div >
@Html.TextBoxFor(m=>m.FirstName);
@Html.TextBoxFor(m=>m.MiddleName);
@Html.TextBoxFor(m=>m.LastName);
<div>
de même pour l'Adresse.cshtml et Téléphone.cshtml
dans le web.config: -
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
En cliquant sur le bouton Enregistrer sur le formulaire vide, il ne ajax post pour vous Inscrire [HttpPost] la méthode du Contrôleur. Pourquoi n'est-il pas me donner la validation côté client messages je pense que sa prétendue Discrète de validation ? Je ne vois pas d'erreurs dans la console.
source d'informationauteur user2232861
Vous devez vous connecter pour publier un commentaire.
Le bouton "soumettre" doit être de type "envoyer" pour déclencher le jquery valider validation, que ce soit en utilisant le plugin jquery sur son propre ou avec la discrète plugin.
Donc, ce serait de déclencher la validation:
Mais comme vous avez déjà écrit un code pour gérer le clic sur le bouton, il peut être plus facile de déclencher manuellement la validation
Je pense que vous avez besoin de réorganiser les scripts références
si vous utilisez le _Layout.cshtml supprimer le suivre référence
sur le fond
que le travail pour moi!
J'ai aussi eu le même problème qui a nécessité quelques semaines à déboguer.
J'ai été en utilisant page aspx.
La cause était que
Html.BeginForm
déclaration a été placé après un<table>
tag.De ce fait, les
<form>
balise pour fermer avant tout<input>
tag, et donc la discrète validation du client ne fonctionne pas.<form action="/Admin/ContainerManagement" method="post" novalidate="novalidate"></form>
<tr>
<td><input></td>
</tr>
Donc, n'oubliez pas de mettre
Html.BeginForm
avant<table>
tagJ'ai eu le même problème et trouvé que si je l'appelle
'élément.valide()'
avant de la bibliothèque de l'appeler pour valider la fonction happend, qu'il ne sera plus valide mon formulaire. J'ai résolu ce problème en créant une extension qui vérifie si le formulaire a été traitée et seulement de vérifier si l'élément est valide
Vous devez également ajouter des messages d'erreur