在页面刷新期间访问Hashtable中的先前值

时间:2015-08-03 08:13:33

标签: c# asp.net session gridview hashtable

我在gridview中有一个超链接字段。我想在会话期间将所有单击的值存储在该超链接字段的哈希表中。

protected partial class User : System.Web.UI.Page
{
        Hashtable htable = new Hashtable();
        int hTableIndex = 0;
        // ...
}

在页面加载功能中。

if(Session["test"] != null)`
{   
     for(int i = 0 ; i gvUserStatus.Rows.Count ; i++)
     Hashtable tempHashTable = new Hashtable();
     tempHashTable = Session["test"] as Hashtable;
     if(tempHashTable.Contains(someValue)) 
     {
          //Do Something
     }
}

在链接点击事件中:

protected void userID_Click(object sender, EventArgs e)
{
    //logic to get the ClickedValue
    if(!htable.Contains(ClickedValue))
    {
        htable.Add(hTableIndex++,ClickedValue);
    }
    Session["test"] = htable;
}

我正在使用上面的代码,但是在我的哈希表中,只存储了最后点击的值,我该怎么做才能获得整个用户会话的所有先前值?

2 个答案:

答案 0 :(得分:1)

hTableIndex将在postback上失去价值。您还需要将其存储在Session中(如果您在其他网页上不需要它,则只需ViewState

因此,您需要在Page_Load事件中添加此内容:

if (ViewState["hTableIndex"] == null)
    ViewState["hTableIndex"] = hTableIndex;

并在您的链接点击事件userID_Click

protected void userID_Click(object sender, EventArgs e)
{
    //logic to get the ClickedValue
    if(!htable.Contains(ClickedValue))
    {
        var hTableIndex = Convert.ToInt32(ViewState["hTableIndex"]);
        htable.Add(hTableIndex++,ClickedValue);
    }
    Session["test"] = htable;
}

如果有效,请告诉我。 Haven尚未对其进行测试。

答案 1 :(得分:0)

问题在你的hTableIndex中,在重新加载页面时总是指向0,你还需要把它放在会话中,以便下次你可以获得hTableIndex的最大值并在该索引处添加新链接