2009-03-02 5 views
0

Ich arbeite an einer Legacy-Webanwendung in VB.NET für ASP.NET 1.1 geschrieben. Eine bestimmte Seite hat ein Formular mit einer Anzahl von Feldern. Als Reaktion auf einen sich ändernden Wert eines Dropdown-Felds lösche ich eine Anzahl von Feldern, setze eine Anzahl von Dropdown-Boxen auf die erste Option zurück und setze alle auf der Benutzeroberfläche auf "deaktiviert". Um dies zu tun, verwende ich jQuery. Ich füge allen diesen Feldern eine CSS-Klasse hinzu, und dann ist mein jQuery-Selektor etwa wie folgt: $ ("*. My-css-class"). Hier ist ein Beispielcode zur Erläuterung.Legacy ASP.NET 1.1 mit jQuery-Integrationsproblem

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

Das UI-Updates in Reaktion auf den oben js Code erwartet, aber wenn ich wieder die Seite in Reaktion auf eine Schaltfläche klicken Post, noch die ursprünglichen Werte auf der Serverseite zu diesen Kontrollen im Zusammenhang bestehen. Zum Beispiel ist txtSomething eines der Felder mit einer css-Klasse "fields" (also wird es durch den obigen jQuery-Selektor ausgewählt). Der Benutzer gibt "1234" in dieses Textfeld ein und sendet das Formular. Entweder wird die selbe Seite an sich selbst zurückgeliefert, behält ihre Werte bei, oder ich kehre zu dieser Seite zurück und befülle die Werte auf der Serverseite (zum Beispiel klickt der Benutzer auf eine Edit-Schaltfläche auf einer Übersichtsseite), so dass das Steuerelement txtSomething initialisiert wird der Client mit dem Wert "1234". Mein jQuery-Code löscht den Wert so weit, wie der Benutzer ihn in der Benutzeroberfläche sieht, und der Benutzer klickt dann auf eine Senden-Schaltfläche. Wenn ich den Wert mit einem jQuery-Selektor abfrage, ist der Wert dieses Feldes eine leere Zeichenfolge. Wenn die Seite zurückgebucht wird und ich den Code durchtrete (oder etwas mit dem Wert dieses Controls mache), ist es immer noch "1234".

Ein sehr wichtiger Punkt ist, dass diese Werte nach einmaliger Übermittlung an den Browser zurückgesendet werden. Stellen Sie sich also ein Formular vor, das gesendet wird, oder einen Fall, in dem diese Werte auf der Serverseite gebunden oder festgelegt sind und im Voraus an den Browser ausgegeben werden (anstatt mit Standardwerten oder leeren Werten an den Browser ausgegeben zu werden). Wenn ich die Seite als Standard (leere Textfelder) lade, einen Text einfüge und dann die Funktion js auslöst, um diese Felder zu löschen, kommt der eingegebene Wert nie zum Server.

Antwort

1

Warum müssen Sie diese Felder deaktivieren? Das Deaktivieren von Steuerelementen kann dazu führen, dass sie keine Werte an den Server senden ... zumindest passiert das, wenn ein asp.net-Steuerelement serverseitig deaktiviert ist.

Update 1:. konnte nicht nehmen die Zweifel haben, wenn es nur Server-Seite war, so dass ich sah es bis :) http://www.w3.org/TR/html401/interact/forms.html#h-17.12.1 ... „In diesem Beispiel wird das Eingangselement deaktiviert Daher kann es nicht erhalten Benutzereingabe noch wird sein Wert mit dem Formular eingereicht. ", so hatte ich Recht, auch wenn es Client-Seite deaktivieren es wird nicht den Wert

+0

Ich sperre sie nicht auf der Server-Seite. Ich deaktiviere sie auf dem Client, so dass der Benutzer keinen Wert in ihnen auswählen oder eingeben kann. – Rich

+0

Ausgezeichnet ... danke. Ich habe "readonly" anstelle von "disabled" verwendet und die Werte werden nun an den Server gesendet. Mein einziges Problem ist jetzt, dass "readonly" nicht in den Dropdown-Listen funktioniert, also finde ich entweder einen äquivalenten Attr oder mache ein paar hässliche manuelle Sachen auf dem Server für nur die Auswahlen. Danke nochmal – Rich