2009-04-20 10 views
0

J'ai du JavaScript côté client qui définit les champs de formulaire. Lorsque la page est publiée, ces champs sont réinitialisés.Publication JS et ASP.NET côté client

Pourquoi est-ce? Les valeurs de champ ne sont-elles pas capturées et placées dans ViewState lorsque la publication se produit?

EDIT: Lorsque je casse le débogueur sur Page_Load(), avant que tout code ne soit exécuté après la publication, les valeurs du champ de formulaire sont vides.

Répondre

4

Les éléments de formulaire remplis à partir de votre javascript côté client sont-ils désactivés? Si c'est le cas, ASP.NET ignorera la valeur.

Par exemple:

<asp:TextBox ID="TextBox1" Enabled="False" Runat="Server" /> 

<script type="text/javascript"> 
    document.forms[0].elements["TextBox1"].style.disabled = false; 
    document.forms[0].elements["TextBox1"].value = "Value set from Javascript"; 
</script> 

Lorsque ce code est exécuté, ASP.NET pense que la zone de texte est désactivé, et par conséquent supprime sa valeur dans le postback, la valeur de TextBox1.Text sera toujours vide. Pour autant que je sache, ce comportement s'applique à tous les éléments de formulaire. Si ASP.NET pense qu'ils sont désactivés et qu'ils sont activés et remplis côté client, la valeur ne sera pas disponible pour la publication.

+0

Belle prise. Cela m'a pris un peu de temps pour comprendre cela. :) – core

1

Oui. Il semble que vous avez quelque chose d'autre qui ne va pas (peut-être un gestionnaire OnLoad qui ne vérifie pas le champ IsPostback et écrase donc vos valeurs modifiées?).

1

Vérifiez ce qui est en cours d'initialisation sur le côté serveur, la question la plus commune que je vois est que tout code d'initialisation du côté serveur ne vérifie pas IsPackBack comme ceci:

if (!Page.IsPostBack) { 

    // Do Work 

} 
0

L'autre chose à vérifier est si vous faites une publication ou un rappel. Si vous effectuez un rappel, les valeurs de champ de formulaire renvoyées avec le rappel sont celles que la page a d'abord envoyées au client. Pour une raison quelconque, ASP.NET AJAX sélectionne ces valeurs et les envoie à chaque rappel, au lieu de lire à nouveau le champ de formulaire.

0

C'est parce que j'avais enabled="false" sur les champs. J'ai changé les champs à readonly="true" et la même chose arrive.

La solution consistait à modifier les champs en lecture seule à l'exécution à l'aide de JS.

Questions connexes