Asp.net自定义控件属性作为对另一个控件的引用
本文关键字:另一个 控件 引用 net 自定义控件 属性 Asp | 更新日期: 2023-09-27 18:06:24
我希望建立一个用户控件,将有2个公共字符串属性。此字符串应该是具有用户控件的页面的控件的ID。
之后,使用控件来验证类作为一个例子,并为标签提供相关的控件id,我无法
- 在将该控件添加到另一个页面时,在属性面板中将该属性显示为带有该页上控件列表的下拉列表。(这是一个控件验证工作的方式,试图找出我错过了什么。)
-
之后,我能够得到所有我希望限制其中一些到一个特定的控制类型(下拉列表或类似的东西)的列表。基于一些额外的阅读,我已经做了我猜这将需要与自定义类型转换器完成。
[ 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; } }
使用验证控件作为起点(因为验证prop的控件在很大程度上是我想要的),我能够通过以下方式解决这个问题:
- 看了看ValidateControlConverter.cs
-
用我自己的逻辑创建了我自己的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) }; } }
}
-
最后一步是在控件属性
[ Category("Target Controls") , DefaultValue("") , Bindable(true) , Description("The State Text Box To Auto Fill.") , TypeConverterAttribute(typeof(LabelOrTextBoxTypeConverter)) ] public string StateControlToAutoFill
正如你所看到的,我没有得到我想要的100%。我希望将此设置为只是一个控制过滤器类,并有我感兴趣的传入控件类型的列表。我需要做一点更多的挖掘在这里完成这一点,但目前这是如预期的工作。任何知道这个问题的答案的人都会非常感激。
说了又做了,这是工作。不太会用到它,因为你必须在设计模式下使用道具面板来利用生成的列表