我以前使用静态变量来保存我想在回发之间保存的变量数据。我遇到了问题,发现这些变量中的数据在 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>();
}
}
这是我使用的非常简单的类:
[Serializable]
public class linkButtonObject
{
public string storyNumber { get; set; }
public string TaskName { get; set; }
}
我正在添加到 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);
}
}
看来我以前的问题已经解决了,但是又出现了一个新问题。有时当我回发时,我会收到此错误:
[A]System.Collections.Generic.Dictionary
2[System.String,linkButtonObject] cannot be cast to [B]System.Collections.Generic.Dictionary
2[System.String,linkButtonObject]。类型 A 源自 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 在位置 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0 的上下文 'LoadNeither' .0__b77a5c561934e089\mscorlib.dll'。类型 B 源自 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 在位置 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0 的上下文 'LoadNeither' .0__b77a5c561934e089\mscorlib.dll'。
我不明白当我在任何地方都使用同一个类时怎么会出现强制转换问题。我做错了什么,我该如何解决?