我希望用用户控件替换ASP.NET ListView的EditItemTemplate,但我无法弄清楚如何将它绑定到ListView中的数据项以实现双向数据绑定。数据项不是简单属性。这是一个对象。 这似乎只提供单向Eval类型数据绑定:
<EditItemTemplate>
<uc:MyUserControl id="thecontrol" runat="server" TheObject='<%# Container.DataItem %>'/>
</EditItemTemplate>
这会出错:
<EditItemTemplate>
<uc:MyUserControl id="thecontrol" runat="server" TheObject='<%# Bind("Container.DataItem") %>'/>
</EditItemTemplate>
就像这样:
<EditItemTemplate>
<uc:MyUserControl id="thecontrol" runat="server" TheObject='<%# Bind("this") %>'/>
</EditItemTemplate>
是否有一些绑定表达式语法为EditItemTemplate中的当前项提供双向数据绑定?
编辑。这是用户控件:
public partial class EditItemUserControl : System.Web.UI.UserControl
{
public TestObject TheObject
{
get
{
return new TestObject() { ID = Int32.Parse(hfID.Value), Name = txtName.Text };
}
set
{
hfID.Value = value.ID.ToString();
txtName.Text = value.Name;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
答案 0 :(得分:0)
仅供参考。我做错了。用户控件存在于呈现它的页面的上下文中,因此不需要在其上设置DataSource。在.ascx文件中,您只需使用:
Text = '<%# Bind("MyProperty") %>'
或
Text = '<%# Eval("MyProperty") %>'
其中MyProperty是父控件的DataSource的一些属性。