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

本文关键字:另一个 控件 引用 net 自定义控件 属性 Asp | 更新日期: 2023-09-27 18:06:24

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

之后,使用控件来验证类作为一个例子,并为标签提供相关的控件id,我无法

  1. 在将该控件添加到另一个页面时,在属性面板中将该属性显示为带有该页上控件列表的下拉列表。(这是一个控件验证工作的方式,试图找出我错过了什么。)
  2. 之后,我能够得到所有我希望限制其中一些到一个特定的控制类型(下拉列表或类似的东西)的列表。基于一些额外的阅读,我已经做了我猜这将需要与自定义类型转换器完成。

    [
        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;
        }
    }
    

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

使用验证控件作为起点(因为验证prop的控件在很大程度上是我想要的),我能够通过以下方式解决这个问题:

  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
    

正如你所看到的,我没有得到我想要的100%。我希望将此设置为只是一个控制过滤器类,并有我感兴趣的传入控件类型的列表。我需要做一点更多的挖掘在这里完成这一点,但目前这是如预期的工作。任何知道这个问题的答案的人都会非常感激。

说了又做了,这是工作。不太会用到它,因为你必须在设计模式下使用道具面板来利用生成的列表