0

编辑:看起来它可能是一个 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。关闭表单,重新打开设计器。

我究竟做错了什么?我是否需要手动将字符串解析为枚举?

编辑:设计器生成的代码。

<cc1:MyControl ID="MyControl1" runat="server" MyMode="B"  />

编辑:事实上,这个属性也失败了:

  public MyEnum MyMode
  {
    get
    {
      return MyEnum.A;
    }    
    set{}
  }
4

2 回答 2

0

您正在尝试将值设置为字符串 'B'。您需要将其设置为数值,因为这就是枚举......

...
set
{
  ViewState["MyMode"] = value; // <-- 'value' must be an integer equivalent to B
  // in this example, to set as 'B', 'value' == 1
}
...

编辑这篇文章

于 2009-11-19T19:53:36.570 回答
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/

于 2009-11-19T20:44:32.833 回答