编辑:看起来它可能是Visual Studio问题。如果我重新启动Visual Studio,它将一直有效,直到我重建解决方案。
使用此代码时,我在设计器中无法在属性'MyMode'上设置“'B'”:
public class MyControl : CompositeControl
{
public enum MyEnum{ A, B }
[DefaultValue(MyEnum.A)]
public MyEnum MyMode
{
get
{
object obj = ViewState["MyMode"];
return obj == null ? MyMode.A : (MyEnum)obj;
}
set
{
ViewState["MyMode"] = value;
}
}
}
要重现:在项目中创建控件。将控件拖到另一个项目中的Web表单上。在属性窗口中设置MyMode = B.关闭表单,重新打开设计师。
我做错了什么?我是否需要手动将字符串解析为枚举?
编辑:Designer生成的代码。
<cc1:MyControl ID="MyControl1" runat="server" MyMode="B" />
编辑:事实上,这个属性也失败了:
public MyEnum MyMode
{
get
{
return MyEnum.A;
}
set{}
}
答案 0 :(得分:0)
您正在尝试将值设置为“B”,这是一个字符串。您需要将其设置为数值,因为这就是枚举....
...
set
{
ViewState["MyMode"] = value; // <-- 'value' must be an integer equivalent to B
// in this example, to set as 'B', 'value' == 1
}
...
编辑,请参阅this article
答案 1 :(得分:0)
这是Visual Studio 2008 SP1错误
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361826
请注意,实际上发布了两个修补程序,如:http://support.microsoft.com/kb/961847
所述一个用于Windows XP和2009,另一个用于Windows Vista和Windows Server 2008。
Windows XP和2003: http://support.microsoft.com/kb/969612/
Windows Vista和Windows Server 2008: http://support.microsoft.com/kb/967535/