Question

Le code suivant .NET 3.5, placé dans un fichier ASPX, déclenche une erreur JavaScript lorsque la page est chargée (pour les utilisateurs qui ont JavaScript activé):

<noscript>
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server" 
      ControlToValidate="txt"></asp:RequiredFieldValidator>
    <asp:Button ID="btn" runat="server" Text="Button" />
</noscript>

L'erreur se produit parce que le JavaScript généré par la commande de validation de ASP.NET ne vérifie contient pas nulle avant de la deuxième ligne de code ci-dessous:

var ctl00_body_txt_RequiredFieldValidator =
  document.all ?
    document.all["ctl00_body_txt_RequiredFieldValidator"] :
    document.getElementById("ctl00_body_txt_RequiredFieldValidator");

ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";

Quelqu'un peut-il proposer une solution à cela?


Note: Pourquoi je fais cela? Pour mes utilisateurs non JavaScript Je remplaçais certaines fonctionnalités AJAX avec des différents composants de l'interface utilisateur, qui ont besoin de validation.

Était-ce utile?

La solution

Vous devez ajouter ce qui suit à la RequiredFieldValidator:

enableclientscript="false"

Voyant que vous utilisez dans ces

Cela forcera la validation se passer (automatiquement) sur le côté serveur pour vous.

Assurez-vous que vous appelez « page .IsValid » avant de traiter la réponse.

Voir BaseValidator.EnableClientScript pour plus de détails.

Autres conseils

Le javascript est à la recherche d'un élément contenu dans le noscript? Autant que je sache, il y a du côté serveur aucun moyen propre pour détecter le soutien de script.

Je pense que vous aurez besoin de construire dans un redirect (je l'ai vu cela avec une méta-refresh dans un en-tête noscript si vous ne me dérange pas un échec de validation) pour pousser les utilisateurs noscript à un « s'il vous plaît turnscript sur page » ou faire une intervention chirurgicale pour relâcher la liaison validation / contrôle qui peut prendre une certaine quantité de réinvention de la roue. Ceci est l'un de ces domaines où le couplage serré asp.net entre le contrôleur et la vue châtie vraiment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top