在我的web應用程序中發生了一些奇怪的事情。我有我用簡單的持有對象的集合持有兩個變量的靜態詞典:時間流逝時丟失鍵值對的字典
static Dictionary<string, linkButtonObject> linkButtonDictonary = new Dictionary<string, linkButtonObject>();
我跟了LinkButton一個gridview,大約每一個數據與它在字典button.UniqueId相關:
protected void hoursReportGridView_OnRowDataBound(Object sender, GridViewRowEventArgs e)
{
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);
}
然後當LinkButton的點擊我拉查找在使用唯一ID的字典中的值,在SQL查詢中使用它們,並使用檢索到的數據來填充一個gridview,標籤,並顯示一個彈出:
protected void taskLinkButton_Click(object sender, EventArgs e)
{
//create linkbutton object from sender
LinkButton btn = (LinkButton)sender;
//get a list of data relevant to column
string[] infoData = getInfoData(linkButtonDictonary[btn.UniqueID].storyNumber,
linkButtonDictonary[btn.UniqueID].TaskName);
//assign content of list to labels and gridview
productDatabaseLabel.Text = infoData[0];
storyNumberDatabaseLabel.Text = infoData[1];
taskDatabaseLabel.Text = infoData[2];
pointPersonDatabaseLabel.Text = infoData[3];
SqlDataSource6.SelectParameters["storynumber"].DefaultValue = linkButtonDictonary[btn.UniqueID].storyNumber;
SqlDataSource6.SelectParameters["tasktitle"].DefaultValue = linkButtonDictonary[btn.UniqueID].TaskName;
infoGridView.DataBind();
//show popup
MPE.Show();
}
這一切都很好,我可以點擊任何鏈接按鈕,他們正確地創建和填充彈出並顯示它。
我的問題是,如果我離開這個頁面閒置不用幾minuites然後單擊一個LinkButton我得到的錯誤:
什麼我做錯了,我該如何解決?
爲什麼字典被聲明爲靜態?如果您刪除了靜態修飾符,是否會發生此問題? –
如果我刪除靜態我每次都會得到異常。 –
它有什麼特殊之處? KeyNotFound或null? –