假设我们有以下内容:
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属性?即:
<ns:MyControl runat="server" ID="ctl1" Behaviors="A,B,C" />
在这种情况下,子类化不是一个选项(行为的实际意图与此示例略有不同)。当我尝试以这种方式初始化属性时,WebForms会生成解析器错误。同样的问题可以应用于其他List类型(int,strings)。
答案 0 :(得分:1)
在进一步研究之后,我发现WebForms确实使用TypeConverter,如果它能找到它。需要正确装饰类型或属性,详见此related question。
我结束了与此类似的事情:
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);
}
}
}
}
答案 1 :(得分:0)
在使用标记时,您自己建议的字符串属性是唯一的解决方案。