2014-07-14 3 views
0

Salut à tous et merci d'avance. J'ai un code que je suis en train de fixer où je reçois leImpossible de lancer System.String pour taper System.Collections.Generic.Dictionary <string, string> avec la variable de session

message d'erreur: Impossible de lancer System.String taper System.Collections.Generic.Dictionary<string, string>

mais je ne peux pas comprendre quelle partie du le code est interprété en tant que System.String et en cours d'insertion dans la variable de session, ce qui provoque la casse de Dictionary<string, string>.

Le code est assez simple, cette déclaration:

Dictionary<string, string> myControls; 
    private readonly string SCONTROLS = "smControls"; 

En OnInit:

if(!isPostBack) 
    { 
     myControls = new Dictionary<string, string>(); 
     Session[SCONTROLS] = myControls; 
    } 
    else 
    { 
     if (Session[SCONTROLS] != null) 
     { 
      myControls = (Dictionary<string,string>)Session[SCONTROLS]; 

      if (myControls != null) 
       foreach (var controlID in myControls.Keys) 
       { 
        UserControl controlToAdd = new UserControl(); 
        controlToAdd = (UserControl)controlToAdd.LoadControl(myControls[controlID]); 
        controlToAdd.ID = controlID; 

        formatPlaceHolder(controlToAdd); 
       } 
     } 
    } 

Ensuite, dans une section distincte où il y a un contrôle, certaines valeurs sont mises à jour:

UserControl uc = DefaultControl as UserControl; 
    if (uc != null) 
    { 
     uc.ID = Guid.NewGuid().ToString(); 
     formatPlaceHolder(uc); 
     if (!myControls.Keys.Contains(uc.ID)) 
      myControls.Add(uc.ID, uc.AppRelativeVirtualPath); 
     else 
      myControls[uc.ID] = uc.AppRelativeVirtualPath; 

     DefaultControl.LoadNewItem(item, uc.ID, Master.EmpID.Value, ShowRemove, Master.ID); 

    } 

J'ai spéculé que peut-être une partie du problème est que lorsque myControls est modifié, il n'est jamais enregistré dans la variable de session, donc quand il essaie de faire la distribution à partir de la variable de session est simplement vide. Mais puisqu'il a été initialisé en tant qu'objet Dictionary<string,string> pour commencer, je pense que cela n'aurait pas d'importance s'il était encore vide?

Ou le problème est qu'il ne s'initialise pas correctement à l'intérieur de la fonction OnInit?

Mise à jour des informations:

Les valeurs de la variable de session ressemble à ceci:

Key: c52acd20-8d3e-44cc-bc79-8fee9c9c3064 
Value: "~/Questions.ascx" 
+4

Avez-vous vraiment des guillemets autour de votre chaîne, une chaîne dans '(Dictionary <'string, string'>) Session [SCONTROLS];'? – Habib

+0

non, ceux-ci ne sont là que parce que sans cela, la partie «<» du code disparaît et je ne sais pas comment résoudre ce problème autrement. –

+0

Je l'ai édité. Puisque vous utilisez des blocs de code, vous n'avez pas besoin de guillemets simples. – Habib

Répondre

0

Avez-vous mis autour de citation chaîne intentionnellement? Je pense qu'il devrait être, myControls = (Dictionary) Session [SCONTROLS];

Questions connexes