我以前使用静态变量来保存我想在回发之间保存的变量数据.我遇到了问题,发现当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; …Run Code Online (Sandbox Code Playgroud) 在Suzanne Cook的.NET CLR Notes中,她谈到了“ LoadFrom”上下文的危险。特别,
- 如果Load上下文程序集尝试按显示名称加载此程序集,则默认情况下将找不到它(例如,当mscorlib.dll反序列化此程序集时)
- 更糟糕的是,在探测路径上可能会找到具有相同标识但路径不同的程序集,从而导致稍后导致InvalidCastException,MissingMethodException或意外的方法行为。
如何在不显式加载程序集的两个不同版本的情况下通过反序列化来重现此行为?