【问题标题】:Binding related control from ASP.NET markup从 ASP.NET 标记绑定相关控件
【发布时间】:2010-11-14 01:16:46
【问题描述】:

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

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 实例。此控件中的父子关系赋予属性值的某些继承,并且不一定(读作不应该)暗示控件树中的父子关系。

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

干杯
//丹尼尔

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这将是一个解决方案。但我不认为这样做很好和干净,除非您可以从标记中隐藏 MyControlParent 并从后面的代码中隐藏 MyControlParentID。我正在研究该解决方案,如果成功,我会将您的解决方案标记为答案。谢谢和欢呼!
    • 虽然我对解决方案不太满意,但感谢您的回答! =) 我不知何故觉得一个不错的功能被剥夺了。从标记中使 MyControlParent 不可绑定很容易,但我仍然没有找到在后面的代码中隐藏 MyControlParentID 的方法。这是意料之中的,因为在我看来,即使它会使代码变得更好,拥有 CB 不可用的属性可能会很奇怪 ^_^ 干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多