如何将枚举属性添加到WebControl

时间:2009-11-19 19:52:06

标签: c# asp.net designer visual-studio-2008-sp1

编辑:看起来它可能是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{}
  }

2 个答案:

答案 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/