asp.net自定义控件属性作为另一个控件的引用

时间:2013-03-29 14:00:21

标签: c# asp.net class properties

我希望设置一个具有2个公共字符串属性的用户控件。 此字符串应该是具有用户控件的页面控件的ID。

使用控件验证类作为一个示例和标签的关联控件ID后我无法

  1. 将此控件添加到另一个页面时,属性显示为下拉列表,其中包含属性面板中页面上的控件列表。 (这是一种控制来验证工作的方式,试图找出我所缺少的东西。)
  2. 在我能够获得所有的列表后,我希望将其中一些限制为特定的控件类型(下拉列表或其他类似的效果)。基于我已经完成的一些额外阅读,我猜这将需要使用自定义type converter

    [
        Category("Behavior"),
        DefaultValue(""),
        Description("The State Tex Box"),
        TypeConverterAttribute(typeof(AssociatedControlConverter))
    ]
    public string StateControlToAutoFill
    {
        get
        {
            object o = ViewState["StateControlToAutoFill"];
            return ((o == null) ? String.Empty : (string)o);
        }
        set
        {
            ViewState["StateControlToAutoFill"] = value;
        }
    }
    

1 个答案:

答案 0 :(得分:0)

使用验证控件作为起点(正如验证道具的控件在大多数情况下执行我想要的那样)我能够解决此问题。

  1. 看了ValidateControlConverter.cs
  2. 创建我自己的LabelOrTextBoxTypeConverter,用我自己的逻辑覆盖与ValidateControlConverter(FilterControl)相同的方法。

    class LabelOrTextBoxTypeConverter : ControlIDConverter
    {
    //public ControlByTypeIDConverter(List<Type> WantedControlTypes)
    //{
    //    this.ControlTypes = WantedControlTypes;
    //}
    /// <summary>
    /// 
    /// </summary>
    /// <param name="control"></param>
    /// <returns></returns>
    protected override bool FilterControl(Control control)
    {
        bool isWanted = false;
        foreach (var atype in this.ControlTypes)
        {
            isWanted |= control.GetType() == atype;
        }
    
        return isWanted;
    }
    
    
    public List<Type> ControlTypes { get { return new List<Type>() { typeof(TextBox), typeof(Label) }; } }
    

    }

  3. 最后一步是在控件属性

    [
    Category("Target Controls")
    , DefaultValue("")
    , Bindable(true)
    , Description("The State Text Box To Auto Fill.")
    , TypeConverterAttribute(typeof(LabelOrTextBoxTypeConverter))
    ]
    public string StateControlToAutoFill
    
  4. 你可以看到我没有得到100%我想要的东西。 我希望将其设置为仅仅是一个控制过滤器类,并列出我感兴趣的控件类型。我需要在这里进行更多的挖掘来完成这个但是暂时这是有效的正如所料。任何知道这个问题的人都会非常感激。

    所有说和做的这个都有效。不会真正使用它,因为你必须使用prop面板进入设计模式才能利用生成的列表。