2009-03-02 4 views
0

Je travaille sur une application Web héritée écrite en VB.NET pour ASP.NET 1.1. Une page particulière a un formulaire avec un certain nombre de champs. En réponse à une valeur de changement de boîte déroulante, j'efface un certain nombre de champs, en réinitialisant un certain nombre de boîtes déroulantes à la première option, et en les mettant tous à "désactivé" dans l'interface utilisateur. Pour ce faire, j'utilise jQuery. J'ajoute une classe css à tous ces champs, puis mon sélecteur jQuery est quelque chose comme: $ ("*. My-css-class"). Voici quelques exemples de code à expliquer.Héritage ASP.NET 1.1 avec problème d'intégration jQuery

var fields = $("*.fields"); 
if(some_condition) 
{ 
fields.val(""); 
fields.attr("selectedIndex", 0); 
fields.attr("disabled", "disabled"); 
} 

Les mises à jour de l'interface utilisateur comme prévu en réponse au code js ci-dessus, mais quand je republier la page en réponse à un bouton clic, les valeurs d'origine persistent du côté du serveur lié à ces contrôles. Par exemple, txtSomething est l'un des champs avec une classe css "fields" (donc il sera sélectionné par le sélecteur jQuery ci-dessus). L'utilisateur tape "1234" dans cette zone de texte et soumet le formulaire. Soit la même page est retournée à elle-même en conservant ses valeurs, soit je reviens à cette page et préremplit les valeurs côté serveur (par exemple, l'utilisateur clique sur un bouton Edit sur une page de résumé), donc le contrôle txtSomething est initialisé le client avec la valeur "1234". Mon code jQuery efface la valeur dans la mesure où l'utilisateur la voit dans l'interface utilisateur, puis l'utilisateur clique sur un bouton de soumission. Si j'interroge la valeur avec un sélecteur jQuery, la valeur de ce champ est une chaîne vide. Quand la page est postée et que je passe le code (ou que je fais quelque chose avec la valeur de ce contrôle), c'est toujours "1234".

Un point très important à faire est que ces valeurs sont renvoyées au navigateur après avoir été soumises une fois. Ainsi, imaginez un formulaire soumis, ou n'importe quel cas où ces valeurs sont liées ou définies du côté serveur et fournies au navigateur préremplies (au lieu d'être affichées au navigateur avec des valeurs par défaut ou vides). Si je charge la page par défaut (zones de texte vides), entrez du texte, puis déclenchez la fonction js pour effacer ces champs, la valeur que j'ai tapée ne la rend jamais au serveur. Pourquoi devez-vous désactiver ces champs?

Répondre

1

La désactivation des contrôles peut les empêcher de publier des valeurs sur le serveur ... du moins, c'est ce qui se passe lorsqu'un contrôle asp.net est désactivé côté serveur.

Mise à jour 1:. ne pouvait pas prendre d'avoir le doute si elle était seulement côté serveur, donc je l'ai regardé en http://www.w3.org/TR/html401/interact/forms.html#h-17.12.1 :) ... « Dans cet exemple, l'élément INPUT est désactivé Par conséquent, il ne peut pas recevoir l'entrée de l'utilisateur et sa valeur ne sera pas soumise avec le formulaire. ", donc j'avais raison, même en le désactivant côté client il ne publiera pas la valeur

+0

Je ne les désactive pas côté serveur. Je les désactive sur le client afin que l'utilisateur ne puisse pas sélectionner ou saisir une valeur dans ceux-ci. – Rich

+0

Excellent ... merci. J'ai utilisé "readonly" au lieu de "disabled" et les valeurs sont maintenant envoyées au serveur. Mon seul problème est maintenant que "readonly" ne fonctionne pas sur les listes déroulantes, donc je vais trouver un attr équivalent ou faire des trucs laids sur le serveur pour les sélections. Thx à nouveau – Rich