2009-04-20 8 views
0

Ich habe einige clientseitige JavaScript, die Formularfelder setzt. Wenn die Seite zurückbucht, werden diese Felder zurückgesetzt.Client-Side JS und ASP.NET Postback

Warum ist das? Werden die Feldwerte nicht erfasst und in den ViewState gestellt, wenn das Postback auftritt?

BEARBEITEN: Wenn ich den Debugger auf Page_Load() zerbricht, bevor Code nach dem Postback ausgeführt wird, sind die Formularfeldwerte leer.

Antwort

4

Sind die Formularelemente, die von Ihrem clientseitigen JavaScript festgelegt werden, als deaktiviert festgelegt? Wenn dies der Fall ist, ignoriert ASP.NET den Wert.

Zum Beispiel:

<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> 

Wenn dieser Code ausgeführt wird, denkt ASP.NET, dass die Textbox deaktiviert ist, und daher verwirft dessen Wert in der Postbacks, so dass der Wert von TextBox1.Text immer leer sein. Soweit ich weiß, gilt dieses Verhalten für alle Formularelemente. Wenn ASP.NET denkt, dass sie deaktiviert sind und sie anschließend aktiviert und clientseitig aufgefüllt werden, ist der Wert für das Postback nicht verfügbar.

+0

Schöner Fang. Nahm mich ein bisschen, um das herauszufinden. :) – core

1

Ja. Es scheint, als ob etwas anderes schief gelaufen ist (vielleicht ein OnLoad-Handler, der das IsPostback-Feld nicht überprüft und daher Ihre geänderten Werte überschreibt?).

1

prüfen, was auf Server-Seite initialisiert wird, ist die häufigste Frage, die ich gesehen habe, ist, dass jeder Server-Seite Initialisierungscode nicht für IsPackBack überprüft wie so:

if (!Page.IsPostBack) { 

    // Do Work 

} 
0

Die andere Sache zu prüfen ist ob Sie ein Postback oder einen Rückruf durchführen. Wenn Sie einen Rückruf durchführen, werden die Formularfeldwerte, die mit dem Rückruf zurückgesendet werden, als erste Seite an den Client gesendet. Aus irgendeinem Grund pickt ASP.NET AJAX diese Werte und sendet sie bei jedem Rückruf, anstatt das Formularfeld neu zu lesen.

0

Es ist, weil ich enabled="false" auf den Feldern gesetzt hatte. Ich habe die Felder in readonly="true" geändert und das gleiche passiert.

Die Lösung bestand darin, die Felder zur Laufzeit mit JS schreibgeschützt zu ändern.