具有自定义绑定属性的DynamicControl

时间:2014-11-25 13:38:14

标签: c# asp.net asp.net-dynamic-data

我正在使用网页表单和动态数据,需要将对象从动态控件后面的代码传递到我的字段模板。

我使用名为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被访问。

欢迎提出任何建议。

1 个答案:

答案 0 :(得分:0)

这是不可能的,你只能通过标记传递“值类型”。请注意,这不是动态数据的限制,而是Asp.Net WebForms抱歉。