具有自定义绑定属性的动态控件

本文关键字:动态控件 属性 绑定 自定义 | 更新日期: 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 很抱歉。