Asp.net 有没有办法在webform中绑定文本框,以便将数据保存为用户在中键入的内容?

Asp.net 有没有办法在webform中绑定文本框,以便将数据保存为用户在中键入的内容?,asp.net,data-binding,databound,databound-controls,Asp.net,Data Binding,Databound,Databound Controls,我的Web表单中有许多TBs绑定到代码隐藏中的属性: <asp:TextBox ID="tbFirstName" Text="<%# Contact.FirstName %>" runat="server" /> <script language="c#"> public Contact Contact { get { return (Contact)ViewState["Contact"

我的Web表单中有许多TBs绑定到代码隐藏中的属性:

<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()作为联系人
得到
返回视图状态(“联系人”);
结束
端属性
而接触就是这种属性

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

是否有一种方法可以动态执行此操作(而不是手动从所有TBs检索数据并更新联系人对象)

实际上,我愿意通过在表单体中分布的简单文本框实现双向数据绑定


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

您知道您所说的是web应用程序吗?它正在用户的浏览器中运行。为了更新数据库,您必须通过AJAX或回发往返到服务器。你真的想每次击键都这样做吗


从您的评论中可以明显看出,您并不是在每次击键时都试图回写数据库

不过,数据绑定并不是这样工作的。数据绑定是ASP.NET中纯粹的服务器端操作。即使Bind方法提供的双向数据绑定也只能在完整的回发上工作(尽管我承认我没有用UpdatePanel尝试过)


作为实验,创建一个新页面,并设置双向数据绑定(例如,请参阅中的“使用FormView以获得更灵活的数据修改用户界面”)。一旦让它“正常”工作,试着将FormView放入UpdatePanel,看看绑定是否仍然有效。如果是这样,请查看是否可以在每次按键时启动UpdatePanel。

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


从您的评论中可以明显看出,您并不是在每次击键时都试图回写数据库

不过,数据绑定并不是这样工作的。数据绑定是ASP.NET中纯粹的服务器端操作。即使Bind方法提供的双向数据绑定也只能在完整的回发上工作(尽管我承认我没有用UpdatePanel尝试过)


作为实验,创建一个新页面,并设置双向数据绑定(例如,请参阅中的“使用FormView以获得更灵活的数据修改用户界面”)。一旦让它“正常”工作,试着将FormView放入UpdatePanel,看看绑定是否仍然有效。如果是这样,请查看是否可以在每次按键时启动UpdatePanel。

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

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

是的,我意识到了。在本例中,我希望更新驻留在状态管理器中的对象。还有一个保存数据的按钮。我不在乎成本。有许多重要的TBs客户希望它这样做。我想我会在客户端序列化它,然后在单击“保存更改”时收集它。但这不是你说的你想要的。你说过每次击键都要更新。顺便说一句,确保客户理解他们的要求没有错。此外,如果您正在更新现有数据库行,可能会由于输入错误而失败。1)我肯定不会将其提交到存储,只更新驻留在状态管理器中的对象。2) 由于它有一系列字段,客户不想听,他希望至少在TextChanged事件(实际上是在blur上触发的)中保存项目。您应该使用您仅尝试更新状态服务器的信息更新您的问题。尽管如此,这还是有很多往返,即使你不去数据库。是的,我意识到了。在本例中,我希望更新驻留在状态管理器中的对象。还有一个保存数据的按钮。我不在乎成本。有许多重要的TBs客户希望它这样做。我想我会在客户端序列化它,然后在单击“保存更改”时收集它。但这不是你说的你想要的。你说过每次击键都要更新。顺便说一句,确保客户理解他们的要求没有错。此外,如果您正在更新现有数据库行,可能会由于输入错误而失败。1)我肯定不会将其提交到存储,只更新驻留在状态管理器中的对象。2) 因为它有一大堆字段,客户不想听,他希望至少在TextChanged事件(实际上会触发模糊)时保存项目。你应该用信息更新你的问题