从ASP.NET标记绑定相关控件

时间:2010-11-14 01:16:47

标签: asp.net binding custom-controls markup typeconverter

我有一个控件,看起来像这样:

public class MyControl : Control
{
   [Bindable(true)]
   public MyControl MyControlParent { get; set; }
   // snip
}

在我的标记中,我想要以下内容:

<tag:MyControl ID="foo" runat="server">
   <tag:MyControl ID="bar" MyControlParent="foo" runat="server"></tag:MyControl>
</tag:MyControl>

我希望能够像这样命名父母的原因是因为我也希望能够做到这样的事情:                                      或

<tag:MyControl ID="foo" runat="server">
    <tag:MyControl ID="foobar" runat="server">
       <tag:MyControl ID="bar" MyControlParent="foo" runat="server"></tag:MyControl>
    </tag:MyControl>
</tag:MyControl>

<tag:MyControl ID="foo" runat="server"></tag:MyControl>
<!-- snip -->
<tag:MyControl ID="bar" MyControlParent="foo" runat="server"></tag:MyControl>

我尝试添加一个类型转换器,但是在设置HttpContext.Current.Handler之前它会触发,这意味着我无法在页面控件中搜索所需的MyControl实例。此控件中的父子关系赋予属性值的某些继承,并且(不应该读)不一定意味着控制树中的父子关系。

这个问题是否有(实际)解决方案,或者我现在只想要更多可能? =)

干杯
//丹尼尔

1 个答案:

答案 0 :(得分:0)

您的代码的基本问题是您将MyControlParent属性设置为父控件的 ID 而不是控件本身,但该属性是使用MyControl类型声明的。可以将属性的类型更改为字符串,然后在代码中的其他位置从ID中查找实际控件。