代码之家  ›  专栏  ›  技术社区  ›  Heinzi

ASP.NET:属性类型为List<Something>的自定义控件(或用户控件)。可以在ASPX源中设置属性吗?

  •  1
  • Heinzi  · 技术社区  · 14 年前

    List<Something> :

    Private p_myList As New List(Of Guid)
    Public Property MyList() As List(Of Guid)
        Get
            Return p_myList
        End Get
        Set(ByVal value As List(Of Guid))
            If value Is Nothing Then Throw New ArgumentNullException()
            p_myList = value
        End Set
    End Property
    

    是否可以使用UserControl在页面的aspx源中设置此属性,例如:

    <uc1:myUserControl runat="server" MyList="3c7d794e-7645-46e7-bdde-a0bc42679261, 3c7d794e-7645-46e7-bdde-a0bc42679262" />
    

    或者我需要创建一个字符串类型的“兼容性属性”,然后对其进行解析?(我知道我可以通过代码隐藏设置这些值,但我更喜欢在aspx源代码中设置。)

    2 回复  |  直到 14 年前
        1
  •  4
  •   Richard Friend    14 年前

    你需要创建一个 TypeConvertor

    有点像

    public class GuidListTypeConverter : System.ComponentModel.TypeConverter 
    { 
        public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, Type sourceType) 
        { 
            return sourceType == typeof(Guid); 
        } 
        public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) 
        { 
            string val = value as string; 
    
            string[] vals = val.Split(','); 
            System.Collections.Generic.List<Guid> ret = new System.Collections.Generic.List<Guid>();
            foreach (string s in vals)
            {
                ret.Add(Guid.Parse(s));
            }
            return ret;
        } 
    }
    

    [TypeConverter(typeof(GuidListTypeConverter))]
    public List<Guid> MyList {get;set;}
    
        2
  •  0
  •   user240141 user240141    14 年前
     QUICK & DIRTY TRICK : make the property public and use the code 
       ((MyPageClassName)this.Page).PropertyName
    

    通过这种方式,您可以提供对控件的访问,从UserControl访问父页面,反之亦然。若要使控件可用,请在其各自的page designer.cs文件中将其公开。

    ****<<Update>>****
    

    谢谢你纠正我。AFAICU,您想在aspx页面中设置用户控件的属性。就像我们设置gridview的DataKeyNames一样,在这里可以放置多个键字段。所以他们是一个问题,你如何知道你在列表中放置的GUID总是唯一的。或者这个GUID是固定的并且来自数据库。你如何保持一致性?

    我建议,对于这些从代码隐藏的东西,你可以有更多的控制作为aspx。