大家好,提前谢谢。我有一些代码我试图修复我获得
的地方错误消息:无法转换
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"
答案 0 :(得分:0)
你故意在字符串旁边放引号吗?我认为应该是, myControls =(Dictionary)Session [SCONTROLS];