假设我有一个对象
class Person {
public string Name { get; set; }
public int Age { get; set; }
}
该对象是从工厂检索的(即不能使用SQLDataSource或类似的东西)
Person person = PersonFactory.GetPerson();
如何在Web表单上双向DataBind两个属性到Textboxes?我查看了FormView,但这似乎不符合我的需求,因为我没有迭代对象集合。当我尝试使用它时,我似乎没有在FormUpdated事件中的Person对象中获取已发布的值。而且我像这样绑定
标记
<asp:Textbox Text=<%# Bind("Name") %> />
背后的代码
FormView1.DataSource = new List() { person };
FormView1.DataBind();
我觉得我错过了一些非常明显的东西。我应该使用FormView吗?它似乎不适合简单的数据绑定,但&lt;#%Bind%&gt;方法必须在某种类型的容器中 - 是否有更合适的对象?
答案 0 :(得分:1)
尝试在TextBox控件上调用DataBind方法。
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
MyTextBox1.DataBind();
MyTextBox2.DataBind();
}
我之前从未尝试过以这种方式进行双向绑定,但是使用Bind(“property”)语法,就我所知,它应该以这种方式工作。
如果调用DataBind方法不起作用,那么FormView是您最好的选择。
答案 1 :(得分:1)
您需要处理FormView的更新 - asp.net数据绑定控件中的更新不是自动的。我还考虑使用ObjectDataSource - 保持标记中的所有绑定可以使事情更容易找到。当您使用ObjectDataSource时 - 它会自动将您的单个对象包装在IEnumerable中,因此绑定到返回Person的方法是可以接受的。如果您不想写出yoruself表单,也可以考虑使用DetailsView。在您的情况下,您可以执行以下操作
<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对象的更新持久保存到数据存储中,而无需自己处理更新事件。
答案 2 :(得分:-1)
DataBinder.Eval(Container.DataItem, "Name")
这应该可以解决问题,但我认为您需要对自己进行一些事件处理才能进行双向绑定。