2009-07-13 12 views
0

ich in meinem Webformular viele TBs haben hinter einer Eigenschaft im Code gebunden:Gibt es eine Möglichkeit, Textfelder in einem Webformular zu binden, sodass die Daten beim Eingeben des Benutzers gespeichert werden?

<asp:TextBox ID="tbFirstName" Text="<%# Contact.FirstName %>" runat="server" /> 
<script language="c#"> 
    public Contact Contact 
    { 
     get 
     { 
      return (Contact)ViewState["Contact"]; 
     } 
    } 
</script> 
<script language="VB"> 
    Public ReadOnly Property Contact() As Contact 
     Get 
      return ViewState("Contact"); 
     End Get 
    End Property 
</script> 

Während Kontakt ist, dass Eigentum.

Ich möchte, dass, wenn der Benutzer Text einfügt, sollte es sofort an das Objekt Kontakt gebunden werden, z. Wenn der Benutzer eine Taste drückt oder sogar den Fokus verliert (TextChanged), wäre das auch gut.

Gibt es eine Möglichkeit, es dynamisch zu tun (anstatt die Daten von allen TBs manuell abzurufen und das Kontaktobjekt zu aktualisieren)?

Ich bin eigentlich bereit, Zwei-Wege-Datenbindung mit einfachen Textfeldern im Formular Körper zu erreichen.

Hinweis: Ich werde nicht die Elemente in der DB natürlich speichern, ich will nur das Objekt (Kontakt), die in der Zustandsverwaltung befindet.

Antwort

3

Wissen Sie, dass Sie über eine Webanwendung sprechen? Es läuft im Browser des Benutzers. Um eine Datenbank zu aktualisieren, müssen Sie entweder über AJAX oder über ein Postback eine Rundreise zum Server machen. Wollen Sie das wirklich bei jedem Tastendruck tun?

Aus Ihren Kommentaren ist ersichtlich, dass Sie nicht versuchen, bei jedem Tastendruck zurück in die Datenbank zu schreiben.

Noch funktioniert Datenbindung nicht auf diese Weise. Datenbindung ist eine rein serverseitige Aktion in ASP.NET. Sogar die Zwei-Wege-Datenbindung, die von der Bind-Methode geboten wird, funktioniert nur bei einem vollständigen Postback (obwohl ich zugeben muss, dass ich es nicht mit einem UpdatePanel versucht habe).

Erstellen Sie als Experiment eine neue Seite, und richten Sie eine wechselseitige Datenbindung ein (siehe "Verwenden der FormView für eine flexiblere Datenmodifikationsbenutzerschnittstelle" in An Overview of Inserting, Updating, and Deleting Data als Beispiel). Sobald Sie es "normal" arbeiten, versuchen Sie das FormView in ein UpdatePanel und sehen, ob das Bind noch funktioniert. Wenn ja, prüfen Sie, ob Sie das UpdatePanel bei jedem Tastendruck auslösen können.

+0

Ja erkannte ich. In meinem Fall möchte ich ein Objekt aktualisieren, das sich im Zustandsmanager befindet. Es gibt auch eine Schaltfläche zum Speichern von Daten. – Shimmy

+0

Die Kosten sind mir egal. Es gibt viele mant TBs, wo der Kunde möchte, dass er so handelt. Ich denke, ich werde es in den Client serialisieren und dann sammeln, wenn auf Änderungen speichern geklickt wird. – Shimmy

+0

Aber das ist nicht das, was du gesagt hast. Sie sagten, Sie wollten bei jedem Tastendruck aktualisieren. Übrigens, es ist nichts falsch daran sicherzustellen, dass der Klient versteht, wonach er fragt. Wenn Sie eine vorhandene Datenbankzeile aktualisieren, können außerdem Fehler aufgrund von Tippfehlern auftreten. –

2

Hören Sie auf zu denken, als ob Sie eine Desktop-Anwendung entwickeln würden! Weil du nicht bist. Das "Kontakt" -Objekt befindet sich auf dem Server, während Ihre Textbox auf dem Client "lebt". Das Aktualisieren des Serverobjekts wäre sehr kostspielig. Sie müssen asynchrone Übertragungen zwischen dem Server und dem Client mit den neuen Daten durchführen und tun bei so kurzen Intervallen wäre das gar nicht möglich. Ich dachte, Sie können eine Verzögerung in das Textfeld hinzufügen, nach dem Sie die Daten auf den Server übertragen würden. Warum würdest du das jemals brauchen?