I have in my webform many TBs bound to a property in the code behind:
<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>
While Contact is that property.
I want that when the user inserts text, it should immediately be bound to the Contact object e.g. when the user presses a key down or even when losing focus (TextChanged) would be good too.
Is there a way to do it dynamically (rather than manually retrieve the data from all the TBs and update the Contact object)?
I am actually willing to achieve two-way databinding with simple textboxes spread in the form body.
Note: I am not going to store the items to the DB of course, I just want the object (Contact) which resides in the state manager.
Do you realize you’re talking about a web application? It’s running in the users’ browser. In order to update a database, you have to make a round trip to the server, either through AJAX or through a postback. Do you really want to do this for every keystroke?
From your comments, it’s apparent that you aren’t trying to write back to the database on every keystroke.
Still, data binding doesn’t work this way. Data binding is a purely server-side action in ASP.NET. Even the two-way data binding afforded by the Bind method only works on a full postback (though I admit I haven’t tried it with an UpdatePanel).
As an experiment, create a new page, and set up two-way databinding (see “Using the FormView for a More Flexible Data Modification User Interface” in An Overview of Inserting, Updating, and Deleting Data for an example). Once you get it working “normally”, try putting the FormView into an UpdatePanel and see if the Bind still works. If so, see if you can get the UpdatePanel to fire on every keystroke.