让我们说,我们有以下几种:

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标记?即:

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

子类不是一个选项,在这种情况下,(实际意图的行为略有不同,这个例子)。Web表单产生的分析错误,当我试试来初始化财产以这种方式。同样的问题可适用于其他单种类型(int,strings)。

有帮助吗?

解决方案

后研究这一步,我发现web表单不会使用。如果能找到它。的类型或财产需要被装饰正确,详细说明在这 相关的问题.

我伤了实现类似的东西:

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

其他提示

您自己的串属性的建议使用标记工作时是唯一的解决办法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top