Dav*_*ell 5 .net c# asp.net dictionary
我以前使用静态变量来保存我想在回发之间保存的变量数据.我遇到了问题,发现当appdomain结束时,这些变量中的数据会丢失.所以我做了一些研究并决定选择ViewStates:
static Dictionary<string, linkButtonObject> linkButtonDictonary;
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["linkButtonDictonary"] != null)
{
linkButtonDictonary = (Dictionary<string, linkButtonObject>)ViewState["linkButtonDictonary"];
}
else
{
linkButtonDictonary = new Dictionary<string, linkButtonObject>();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的非常简单的类:
[Serializable]
public class linkButtonObject
{
public string storyNumber { get; set; }
public string TaskName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在添加到linkButtonDictionary,因为gridview是数据绑定:
protected void hoursReportGridView_OnRowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton btn = (LinkButton)e.Row.FindControl("taskLinkButton");
linkButtonObject currentRow = new linkButtonObject();
currentRow.storyNumber = e.Row.Cells[3].Text;
currentRow.TaskName = e.Row.Cells[5].Text;
linkButtonDictonary.Add(btn.UniqueID, currentRow);
}
}
Run Code Online (Sandbox Code Playgroud)
似乎我之前的问题已得到解决,但新的问题已经出现.有时当我回发时,我收到此错误:
[A] System.Collections.Generic.Dictionary
2[System.String,linkButtonObject] cannot be cast to [B]System.Collections.Generic.Dictionary2 [System.String,linkButtonObject].类型A源自位于'C:\ Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0'上下文'LoadNeither'中的'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' .0__b77a5c561934e089\mscorlib.dll中".类型B源自'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'在上下文'LoadNeither'位置'C:\ Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0 .0__b77a5c561934e089\mscorlib.dll中".
当我到处使用同一个类时,我不明白怎么会有一个转换问题.我做错了什么,我该如何解决?
感谢大家的意见,它帮助我找到了问题。
我在 .aspx.cs 页面中有一个简单的类:
[Serializable]
public class linkButtonObject
{
public string storyNumber { get; set; }
public string TaskName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这就是程序集加载两次并导致问题的原因。