ASP.Net MVC 3 Discrète de validation ne fonctionne pas sur la Vue Partielle
J'ai configuré une vue partielle qui abrite sa propre balise de formulaire, comme ceci:
<tr>
@using (Html.BeginForm("Create"))
{
<td>
@Html.TextBoxFor(model => model.Date)
@Html.ValidationMessageFor(model => model.Date)
</td>
<td>
@Html.TextBoxFor(model => model.Amount)
@Html.ValidationMessageFor(model => model.Amount)
</td>
<td>
@Html.TextBoxFor(model => model.Tags)
@Html.ValidationMessageFor(model => model.Tags)
</td>
<td>
@Html.EnumDropDownListFor(model => model.Type)
</td>
<td>
<input type="submit" value="Add" />
@Html.ValidationSummary(true)
</td>
}
</tr>
J'rendre sur une page à l'aide de @Html.Action("Création") (C'est une partie d'un tableau, d'où le <tr> balises.
Pour une raison étrange, de mon côté client de validation ne fonctionne pas, et j'ai d'abord voir les erreurs lors de l'affichage.
Est-il quelque chose de spécial à propos des vues partielles et validation côté client ?
J'ai inclus les scripts suivants:
<script src="/Scripts/jquery.1.5.1.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
MODIFIER
J'ai juste essayé de jeter ce script sur la page:
jQuery('form').submit(function ()
{
alert(jQuery(this).valid());
});
Il avertit "vrai", de sorte que le client script de validation est bien là, et pour une raison quelconque, il n'est pas de vérifier les champs en question :-/
EDIT 2
J'ai téléchargé l'intégralité du code source de la page (HTML + JS) pour pastebin: http://pastebin.com/GvqLW495
OriginalL'auteur Steffen | 2011-03-14
Vous devez vous connecter pour publier un commentaire.
Modifier:
Je viens de réaliser, en regardant ton code, que vous êtes à l'aide de jQuery 1.5.1 avec l' (je suppose) .FILET, à condition de jQuery.valider. Malheureusement, ces deux ne fonctionnent pas encore. Vous aurez à la tête de - vous ici pour télécharger une version qui fonctionne avec les dernières jQuery (vous aurez besoin d'utiliser 1.4.4). Si cela ne fonctionne pas, je voudrais encore vous recommandons de vérifier la solution ci-dessous.
J'ai eu un problème similaire (bien que je ne suis pas sûr que c'est exactement le même problème). J'ai écrit au sujet de la solution dans ce blog. Malheureusement, je ne peux pas être sûr que vous êtes d'avoir exactement le même problème, mais ça vaut le coup.
Fondamentalement, il est apparu le fait que j'ai dû appeler cette ligne après le chargement de mon PartialViews (bien que j'ai été de les charger via AJAX qui est ce que je pense est la cause du problème):
Voir le blog pour plus de détails. J'espère que ça vous aide.
Regardez ma mise à jour. Je viens de réaliser que j'ai complètement raté ce que les fichiers JavaScript vous avez été chargement. Essayez la version 1.4.4 de jQuery et voir si cela résout le problème.
J'ai juste essayé d'utiliser 1.4.4 sans succès non plus. Le plus drôle, c'est mon discrète de validation fonctionne très bien sur des pages entières. (À l'aide de deux 1.5.1 et 1.4.4) C'est juste une vue partielle qui n'est pas conforme.
Dang. Est-ce toutes les vues partielles, ou tout simplement celui-ci (avec tables)? Aussi...juste une question stupide...êtes-vous sûr que votre vue partielle sur le chargement des pages qui se chargent de ces fichiers JavaScript? (Question stupide, mais, parfois, les choses stupides pouvez obtenir de vous.) Désolé je ne pouvais pas être mieux aider.
Je n'ai pas essayé les vues partielles d'autres endroits, donc je ne peux pas vraiment dire 🙁 pour toutes les pages, oui, j'ai vérifié la source, les scripts sont là. Regarde ma mise à jour de la question, c'est peut-être qu'il clarifie quelque chose.
OriginalL'auteur JasCav
J'ai enfin trouvé la cause de la panne, c'est le fait que ma vue partielle est à l'intérieur d'un tableau html...
Cela ne fonctionne pas, cependant, si je déplace le @Html.Une Action en dehors de la balise table, il fonctionne très bien.
ok c'est un peu en retard, mais pouvez-vous nous expliquer "si vous n'êtes pas à l'aide de votre maître de mise en page (d'où l'partielle) puis aucun des scripts de validation allez charger". J'ai le même scénario que précédemment, chargement partiel via $.obtenir et tous les js (validations etc) sont dans .mise en page, pourquoi dois-je encore besoin d'ajouter la ligne mentionnée à l'JasCav commentaire?
OriginalL'auteur Steffen
Je pense que la racine de votre problème wat l'utilisation illégale de la syntaxe html:
<tr>
balise ne peut contenir que des<td>
balises.Dans la plupart des cas, une structure comme la votre, ne sera pas rendu correcty dans les navigateurs, especiallywhen chargé de manière asynchrone.
OriginalL'auteur Jacek