关于ASP.NET中数据绑定的困惑

关于ASP.NET中数据绑定的困惑,asp.net,data-binding,Asp.net,Data Binding,假设我有一个对象 class Person { public string Name { get; set; } public int Age { get; set; } } 并且该对象是从工厂检索的(即不能使用SQLDataSource或类似的东西) 如何将这两个属性双向数据绑定到web表单上的文本框?我查看了FormView,但这似乎不符合我的需要,因为我没有迭代对象集合。当我尝试使用它时,我似乎没有在FormUpdated事件中获得Person对象中发布的值。我是这样装订

假设我有一个对象

class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}
并且该对象是从工厂检索的(即不能使用SQLDataSource或类似的东西)

如何将这两个属性双向数据绑定到web表单上的文本框?我查看了FormView,但这似乎不符合我的需要,因为我没有迭代对象集合。当我尝试使用它时,我似乎没有在FormUpdated事件中获得Person对象中发布的值。我是这样装订的

加价

<asp:Textbox Text=<%# Bind("Name") %> />

我觉得我错过了一些非常明显的东西。我应该使用FormView吗?它似乎不适合简单的数据绑定,但该方法必须位于某种类型的容器中——是否有更合适的对象?

尝试在TextBox控件上调用DataBind方法

protected override void OnLoad(EventArgs e)
{
     base.OnLoad(e);

     MyTextBox1.DataBind();
     MyTextBox2.DataBind();
}
我以前从未尝试过完全以这种方式进行双向绑定,但是使用Bind(“property”)语法,据我所知,它应该以这种方式工作


如果调用数据绑定方法不起作用,那么FormView是最好的选择。

尝试在TextBox控件上调用数据绑定方法

protected override void OnLoad(EventArgs e)
{
     base.OnLoad(e);

     MyTextBox1.DataBind();
     MyTextBox2.DataBind();
}
DataBinder.Eval(Container.DataItem, "Name")
我以前从未尝试过完全以这种方式进行双向绑定,但是使用Bind(“property”)语法,据我所知,它应该以这种方式工作

如果调用DataBind方法不起作用,那么FormView是最好的选择

DataBinder.Eval(Container.DataItem, "Name")
这应该可以做到,但我认为您需要一些自己的事件处理来完成双向绑定


这应该可以做到,但我认为您需要一些自己的事件处理来进行双向绑定。

您需要处理对您的数据库的更新-asp.net数据绑定控件中的更新不是自动的。我也会考虑使用ObjistDATSURCE——将所有绑定绑定到标记中可以让事情更容易找到。当您使用-时,它会自动将单个对象包装在IEnumerable中,因此绑定到返回Person的方法是可以接受的。如果你不想把表格写出来,你也可以考虑使用A。在您的情况下,您可以执行以下操作

<asp:FormView runat="server" DataSourceID="MyPersonDataSource"> ... </asp:FormView>
<asp:ObjectDataSource runat="server" ID="MyPersonDataSource" 
    TypeName="PersonFactory" DataObjectTypeName="Person" 
    SelectMethod="GetPerson" UpdateMethod="UpdatePerson" />
。。。

为了实现这一点,您需要在PersonFactory类上使用UpdateMethod(Person)方法。这样做可以消除代码隐藏中的绑定,并允许将对person对象的更新持久化到数据存储中,而无需您自己处理更新事件。

您需要处理对的更新-asp.net数据绑定控件中的更新不是自动的。我也会考虑使用ObjistDATSURCE——将所有绑定绑定到标记中可以让事情更容易找到。当您使用-时,它会自动将单个对象包装在IEnumerable中,因此绑定到返回Person的方法是可以接受的。如果你不想把表格写出来,你也可以考虑使用A。在您的情况下,您可以执行以下操作

<asp:FormView runat="server" DataSourceID="MyPersonDataSource"> ... </asp:FormView>
<asp:ObjectDataSource runat="server" ID="MyPersonDataSource" 
    TypeName="PersonFactory" DataObjectTypeName="Person" 
    SelectMethod="GetPerson" UpdateMethod="UpdatePerson" />
。。。


为了实现这一点,您需要在PersonFactory类上使用UpdateMethod(Person)方法。这样做可以消除代码隐藏中的绑定,并允许您对person对象的更新持久化到数据存储中,而无需您自己处理更新事件。

文本框需要位于容器中才能使用绑定。我现在正在使用FormView,但我似乎无法让我发布的值反映在我的Objective中,我猜它必须在一个容器中。如何检查回发上的值?现在我再考虑一下,我认为您必须使用某种数据源,因为它也会传回更改。我正在代码中设置数据源,我将更新我的帖子。DataBind方法对双向绑定没有帮助——这只是告诉控件将自己重新绑定到基础数据。您仍然需要自己处理更新。文本框需要放在容器中才能使用绑定。我现在正在使用FormView,但我似乎无法让我发布的值反映在我的Objective中,我猜它必须在一个容器中。如何检查回发上的值?现在我再考虑一下,我认为您必须使用某种数据源,因为它也会传回更改。我正在代码中设置数据源,我将更新我的帖子。DataBind方法对双向绑定没有帮助——这只是告诉控件将自己重新绑定到基础数据。您仍然需要自己处理更新。如果有任何不同,我将使用更新面板。如果有任何不同,我将使用更新面板。感谢帮助,是否可以避免使用对象数据源?当然,您必须手动处理FormView的ItemUpdate事件。ODS很好地为您包装了这一切。该死,我的工厂来自一个spring代理类,我很难让ObjectDataSource接受它,确保您在TypeName属性中有工厂的完整名称空间和类名,在ODS的SelectMethod属性中有工厂方法。DataObjectTypeName应该是Person类的完整名称空间和名称,UpdateMethod应该是工厂中接受单个Person作为参数的方法。啊,因为我使用的是泛型类型,所以我不知道您需要指定CLR tpye名称谢谢您的帮助,是否可以避免使用对象数据源?当然,您必须手动处理FormView的ItemUpdated事件。ODS很好地为您包装了这一切。该死,我的工厂来自一个spring代理类,我很难让ObjectDataSource接受它,确保您在TypeName属性中有工厂的完整名称空间和类名,在ODS的SelectMethod属性中有工厂方法。DataObjectTypeName应该是Person类的完整名称空间和名称,UpdateMethod应该是上的方法