我正在使用网页表单和动态数据,需要将对象从动态控件后面的代码传递到我的字段模板。
我使用名为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
。
我感觉这个问题与必须绑定控件有关,但是当我尝试这个时,我会得到例外的&#34; 数据绑定方法,例如Eval(),XPath( )和Bind()只能在数据绑定控件的上下文中使用&#34;。
更新
我发现即使是以下代码......
<asp:DynamicControl Test="<%# Eval("MyProperty") %>" id="MyID" runat="server" DataField="MyField" Mode="Edit" />
...其中MyProperty
是绑定对象的字符串属性,即使这样也不会填充String_Edit.ascx
的Test属性。即使在我调试时,我也可以看到MyProperty
被访问。
欢迎提出任何建议。
答案 0 :(得分:0)
这是不可能的,你只能通过标记传递“值类型”。请注意,这不是动态数据的限制,而是Asp.Net WebForms抱歉。