我以前使用静态变量来保存我想要在回发之间保存的变量数据。我遇到了问题,发现当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 {1}} 2 [System.String,linkButtonObject]。类型A源自&#39; mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;在上下文中'LoadNeither&#39;在位置&#39; C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll&#39;。类型B源自&#39; mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;在上下文中'LoadNeither&#39;在位置&#39; C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll&#39;。
当我到处使用同一个课程时,我不明白怎么会有一个演员问题。我做错了什么,如何解决?
答案 0 :(得分:3)
感谢大家的投入,它帮助我追踪问题。
我在.aspx.cs页面中有我的简单类:
[Serializable]
public class linkButtonObject
{
public string storyNumber { get; set; }
public string TaskName { get; set; }
}
这就是程序集加载两次导致问题的原因。
答案 1 :(得分:2)
这看起来与以下问题完全相同:
InvalidCastException when serializing and deserializing
至于解决方案,处理装配负载等可能超出您的控制范围。
一种简单的方法是XML Serialize / JSON将您的数据序列化为字符串并将该字符串保存在ViewState中。要获得它,您只需要反转该过程。这肯定会解决重复加载问题。