2010-10-20 17 views
1

J'ai un contrôle utilisateur avec une propriété de type List<Something>:ASP.NET: contrôle personnalisé (ou contrôle utilisateur) avec propriété de type Liste <Something>. La propriété peut-elle être définie dans la source ASPX?

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 

Est-ce popssible pour définir cette propriété dans la source ASPX de la page en utilisant le UserControl, par exemple, quelque chose comme:

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

ou dois-je créer une "propriété de compatibilité" de type string qui est ensuite analysée? (Je sais que je pourrais définir ces valeurs par codebehind, mais je préfère le faire dans la source ASPX.)

+0

double possible de http://stackoverflow.com/questions/859625/is-it-possible -to-initialize-a-controls-listt-propriété-en-balisage? – jelbourn

Répondre

3

Vous devez créer un TypeConvertor

Quelque chose comme

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

Puis

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

De cette façon, vous pouvez fournir un accès aux contrôles à et de UserControl à la page parent et Vice versa. Pour rendre les contrôles disponibles, rendez-les publics dans leur fichier page designer.cs respectif.

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

Merci de m'avoir corrigé. AFAICU, vous voulez définir la propriété si le contrôle de l'utilisateur dans la page ASPX. Comme nous définissons les DataKeyNames de la grille, où vous pouvez mettre plusieurs champs clés. Donc, leur est une question comment savez-vous que le GUID que vous placez dans la liste est toujours unique. Ou ce GUID est fixe et provient de la base de données. Comment voulez-vous maintenir la cohérence?

Je suggère, pour de telles choses de jouer à partir de Codebehind, vous pouvez avoir plus de contrôle sur aspx.

+0

Merci pour votre réponse, mais je ne vois pas comment cela se rapporte à ma question. Est-il possible que vous l'ayez mal compris? (En particulier, la dernière phrase de ma question ...) – Heinzi