2009-11-19 6 views
0

Modifier: Il semble que ce soit un problème de Visual Studio. Si je redémarre Visual Studio cela fonctionne jusqu'à ce que je reconstruis la solution.Comment ajouter des propriétés enum à un WebControl

Je reçois une exception « B» ne pouvait être sur la propriété 'Mon Mode » dans le concepteur en utilisant ce code:

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

Reproduire: Créer le contrôle dans un projet. Faites glisser le contrôle sur un formulaire Web dans un autre projet. Définissez MyMode = B dans la fenêtre des propriétés. Fermez le formulaire, rouvrez le concepteur.

Qu'est-ce que je fais mal? Ai-je besoin d'analyser manuellement la chaîne dans une énumération?

Édition: Code généré par le concepteur.

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

Edit: En fait, cette propriété échoue également:

public MyEnum MyMode 
    { 
    get 
    { 
     return MyEnum.A; 
    }  
    set{} 
    } 
+0

fait vous essayez simplement 'public MyEnum MyMode {get; set;}'? – Jason

Répondre

0

Ceci est un Visual Studio 2008 SP1 bug

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361826

Veuillez noter que deux correctifs sont actuellement disponibles, comme décrit sur: http://support.microsoft.com/kb/961847

L'un est pour Windows XP et 2009, tandis que l'autre est pour Windows Vista et Windows Server 2008.

Windows XP et 2003: http://support.microsoft.com/kb/969612/

Windows Vista et Windows Server 2008: http://support.microsoft.com/kb/967535/

0

Vous essayez de définir la valeur à 'B' qui est une chaîne. Vous devez le mettre à une valeur numérique, puisque c'est ce que les énumérations sont ....

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

EDIT voir this article

+0

Bonne idée sur la situation int. Définir 'ViewState [" MyMode "] = 1', tout comme un test, ne se débarrasse pas de l'erreur. – Greg