views:

244

answers:

2

Hello!

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.

+3  A: 

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.

John Saunders
Yes I realized.In my case I want to update an object that resides in the state manager.There is a Save Data button as well.
Shimmy
I don't care about the costs.There are many mant TBs where the customer wants it to act this way.I think I will serialize it in the client then collect it when Save Changes is clicked.
Shimmy
But that's not what you said you wanted. You said you wanted to update on every keystroke. BTW, there's nothing wrong with making sure the client understands what they're asking for. Also, if you're updating an existing database row, you may get failures due to typos.
John Saunders
1) I was definately not going to commit it to the store, only update the object which resides in the state manager.2) Since it has a bunch of fields, the customer doesn't wanna listen he wants the items to be saved at leasat at the TextChanged event (which actually fires on blur).
Shimmy
You should update your question with the information that you're only trying to update the state server. Still, this is a lot of round trips, even if you're not going to the database.
John Saunders
question updated
Shimmy
+2  A: 

Stop thinking like you are developing a desktop application! Because yo are not. The "Contact" object lives on the server while your textbox "lives" at the client, refreshing the server object would be very costly, you'll have to do async transfers between the server and the client with the new data, and doing it at so shorts intervals wouldn't even be possible. Thought you can add a delay on the textbox after which you would transfer the data to the server. Why would you ever need this?

Ion Todirel