以前は、静的変数を使用して、ポストバック間で保存する変数データを保持していました。問題があり、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 に追加しています。
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 は、場所「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 は、場所「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'.
どこでも同じクラスを使用しているときに、キャストの問題が発生する可能性があることを理解していません。私は何を間違っていますか、どうすれば修正できますか?