Question

Disons que nous avons ce qui suit:

public enum RenderBehaviors
{
    A,
    B,
    C,
}

public class MyControl : Control
{
    public List<RenderBehaviors> Behaviors { get; set; }

    protected override void Render(HtmlTextWriter writer)
    {
        // output different markup based on behaviors that are set
    }
}

Est-il possible d'initialiser la propriété Behaviors dans le balisage ASPX / ASCX? i.e.:.

<ns:MyControl runat="server" ID="ctl1" Behaviors="A,B,C" />

Subclassing n'est pas une option dans ce cas (l'intention réelle des comportements est légèrement différente de celle cet exemple). WebForms génère une erreur d'analyse lorsque je tente d'initialiser la propriété de cette façon. La même question pourrait être appliquée à d'autres types de listes (int, cordes).

Était-ce utile?

La solution

Après des recherches plus loin, j'ai trouvé que WebForms n'utilise un TypeConverter si elle peut le trouver. Le type ou la propriété doit être décorée correctement, comme indiqué dans cette question liée .

Je liquidée la mise en œuvre quelque chose de similaire à ceci:

public class MyControl : Control
{
    private readonly HashSet<RenderBehaviors> coll = new HashSet<RenderBehaviors>();

    public IEnumerable<RenderBehaviors> Behaviors { get { return coll; } }

    public string BehaviorsList
    {
        get { return string.Join(',', coll.Select(b => b.ToString()).ToArray()); }
        set
        {
            coll.Clear();
            foreach (var b in value.Split(',')
                .Select(s => (RenderBehvaior)Enum.Parse(typeof(RenderBehavior), s)))
            {
                coll.Add(b);
            }
        }
    }
}

Autres conseils

Votre propre suggestion d'une propriété de chaîne est la seule solution lorsque l'on travaille avec des balises.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top