0

我的网络表单中有许多 TB 绑定到后面代码中的一个属性:

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

而 Contact 是该属性。

我希望当用户插入文本时,它应该立即绑定到 Contact 对象,例如当用户按下一个键或者甚至失去焦点时(TextChanged)也会很好。

有没有办法动态地做到这一点(而不是手动从所有 TB 中检索数据并更新联系人对象)?

我实际上愿意通过在表单主体中传播的简单文本框来实现双向数据绑定。

注意:我当然不会将项目存储到数据库中,我只想要驻留在状态管理器中的对象(联系人)。

4

2 回答 2

3

您是否意识到您在谈论 Web 应用程序?它在用户的浏览器中运行。为了更新数据库,您必须通过 AJAX 或通过回发来往返服务器。你真的想为每次击键都这样做吗?


从您的评论中,很明显您并没有尝试在每次击键时都写回数据库。

尽管如此,数据绑定仍不能以这种方式工作。数据绑定是 ASP.NET 中的纯服务器端操作。即使是由 Bind 方法提供的双向数据绑定也只能在完整的回发上工作(尽管我承认我没有用 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.

于 2009-07-13T03:45:07.383 回答
2

不要像在开发桌面应用程序一样思考!因为你不是。“联系人”对象存在于服务器上,而您的文本框“存在于”客户端,刷新服务器对象将非常昂贵,您必须使用新数据在服务器和客户端之间进行异步传输,并执行此操作如此短的时间间隔甚至是不可能的。认为您可以在文本框上添加延迟,然后将数据传输到服务器。为什么你会需要这个?

于 2009-07-13T03:45:12.530 回答