无法将System.String强制转换为System.Collections.Generic.Dictionary <string,string =“”>使用会话变量</string,>

时间:2014-07-14 19:37:01

标签: c# asp.net

大家好,提前谢谢。我有一些代码我试图修复我获得

的地方
  

错误消息:无法转换System.String进行输入   System.Collections.Generic.Dictionary<string, string>

但我无法弄清楚代码的哪一部分被解释为System.String并被插入到会话变量中,从而导致转换为Dictionary<string, string>

代码很简单,这个声明:

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

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

然后在有控件的单独部分中,一些值正在更新:

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

    }

我猜测问题的一部分可能是当myControls被更改时,它永远不会保存到Session变量中,因此当它尝试从Session变量执行转换时基本上是空的。但是,由于它被初始化为Dictionary<string,string>对象,我认为如果它仍然是空的并不重要吗?

或问题是它是否在OnInit函数内正确初始化?

更新信息:

Session变量中的值如下所示:

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

1 个答案:

答案 0 :(得分:0)

你故意在字符串旁边放引号吗?我认为应该是, myControls =(Dictionary)Session [SCONTROLS];