ASP.NET: пользовательский элемент управления (или пользовательский элемент управления) со свойством типа List <Something>. Можно ли установить свойство в источнике ASPX? - PullRequest
1 голос
/ 20 октября 2010

У меня есть пользовательский элемент управления со свойством типа 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

Возможно ли установить это свойство в источнике aspx страницы с помощью UserControl, например, что-то вроде:

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

или мне нужно создать «свойство совместимости» типа string, которое затем анализируется?(Я знаю, что мог бы установить эти значения с помощью codebehind, но я бы предпочел сделать это в источнике aspx.)

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Вам необходимо создать 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;}
0 голосов
/ 31 марта 2011
 QUICK & DIRTY TRICK : make the property public and use the code 
   ((MyPageClassName)this.Page).PropertyName

Таким образом, вы можете предоставить доступ к элементам управления и из UserControl на родительскую страницу и наоборот.Чтобы сделать элементы управления доступными, сделайте их общедоступными в файле соответствующей страницы designer.cs.

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

Спасибо, что поправили меня.AFAICU, вы хотите установить свойство, если пользовательский элемент управления на странице ASPX.Как мы устанавливаем DataKeyNames вида сетки, где вы можете поместить несколько ключевых полей.Таким образом, их вопрос в том, как узнать, что GUID, который вы помещаете в список, всегда уникален.Или этот GUID исправлен и поступает из базы данных.Как бы вы сохранили согласованность?

Я бы предположил, что для таких вещей, играемых из Codebehind, вы можете иметь больший контроль над aspx.

...