Pergunta

Vamos dizer que nós temos o seguinte:

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

É possível inicializar a propriedade Comportamentos na ASPX / ASCX marcação? ou seja:.

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

Subclassing não é uma opção neste caso (a intenção real dos comportamentos é ligeiramente diferente do que neste exemplo). WebForms gera um erro de interpretação quando eu tento inicializar a propriedade desta forma. A mesma pergunta poderia ser aplicada a outros tipos de lista (int, cordas).

Foi útil?

Solução

Depois de pesquisar isso ainda mais, descobri que WebForms usa um TypeConverter se pode encontrá-lo. O tipo ou as necessidades de propriedade a ser decorado adequadamente, conforme detalhado neste pergunta relacionada .

acabei implementar algo semelhante a isto:

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

Outras dicas

A sua própria sugestão de uma propriedade string é a única solução quando se trabalha com marcação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top