具有自定义绑定属性的动态控件
本文关键字:动态控件 属性 绑定 自定义 | 更新日期: 2023-09-27 18:31:57
我正在使用 Web 窗体和动态数据,需要将一个对象从动态控件背后的代码传递到我的字段模板。
我已经使用名为 Test 的字符串属性成功尝试了这一点。为了演示,此控件在我的表单上...
<asp:DynamicControl Test="Hello field" id="MyID" runat="server" DataField="MyField" Mode="Edit" />
。其中MyField
是绑定对象的字符串属性,我的String_Edit.ascx
字段模板具有以下属性...
public string Test { get; set; }
。我可以看到此属性Test
保存我提供的值,即 "Hello field"
当我打破它的Page_Load
方法时。
我真正想要的是传递一个更复杂的对象,该对象在我的代码隐藏中作为属性引用。但是如果我尝试这个...
<asp:DynamicControl Test="<%# this.MyObject %>" id="MyID" runat="server" DataField="MyField" Mode="Edit" />
。代码隐藏具有此属性的位置...
protected MyClass MyObject
{
get
{
if (this.o == null)
{
this.o = new MyClass();
}
return this.o;
}
}
。我的String_Edit.ascx
属性已更改为...
public MyClass Test { get; set; }
。那么这个属性Test
总是null
。
有一种感觉,问题与必须绑定控件有关,但是当我尝试这样做时,我得到了类似"数据绑定方法,如 Eval()、XPath() 和 Bind() 只能在数据绑定控件的上下文中使用"的异常。
更新
从那以后,我发现即使是以下代码...
<asp:DynamicControl Test="<%# Eval("MyProperty") %>" id="MyID" runat="server" DataField="MyField" Mode="Edit" />
。其中MyProperty
是绑定对象的字符串属性,即使最终不会填充 String_Edit.ascx
的 Test 属性。即使当我调试时,我也可以看到MyProperty
被访问。
任何建议都非常欢迎。
这
是不可能的,您只能通过标记传入"值类型"。 注意 这不是动态数据的限制,但 Asp.Net WebForms 很抱歉。