1

假设我们有以下内容:

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

是否可以在 ASPX/ASCX 标记中初始化 Behaviors 属性?IE:

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

在这种情况下,子类化不是一个选项(行为的实际意图与此示例略有不同)。当我尝试以这种方式初始化属性时,WebForms 会生成解析器错误。相同的问题可以应用于其他列表类型(int、strings)。

4

2 回答 2

1

在进一步研究之后,我发现如果 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);
            }
        }
    }
}
于 2009-05-13T21:41:25.433 回答
0

使用标记时,您自己对字符串属性的建议是唯一的解决方案。

于 2009-05-13T18:43:07.690 回答