Можно ли инициализировать свойство Control List <T>в разметке? - PullRequest
1 голос
/ 13 мая 2009

Допустим, у нас есть следующее:

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

Можно ли инициализировать свойство Behaviors в разметке ASPX / ASCX? i.e.:

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

Создание подклассов в этом случае не вариант (фактическое намерение Поведения немного отличается от этого примера) WebForms генерирует ошибку синтаксического анализатора, когда я пытаюсь инициализировать свойство таким образом. Тот же вопрос может быть применен к другим типам List (int, strings).

Ответы [ 2 ]

1 голос
/ 14 мая 2009

После изучения этого вопроса я обнаружил, что WebForms использует TypeConverter, если он может его найти. Тип или свойство должны быть правильно оформлены, как подробно описано в этом связанном вопросе .

Я реализовал нечто похожее на это:

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);
            }
        }
    }
}
0 голосов
/ 13 мая 2009

Ваше собственное предложение свойства строки является единственным решением при работе с разметкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...