0

我想知道是否可以根据变量动态创建具有不同名称的不同会话变量?

我试图以这种方式完成,但似乎不喜欢我的变量

protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    LinkButton lb = (LinkButton)e.Row.FindControl("MyLinkButton");
    Label options = (Label)e.Row.FindControl("MyLabel");
    if (e.Row.RowType == DataControlRowType.DataRoow)
    {
    Session[lb] = options;  
//I was trying to use this to create Session Variables with Different Names Dynamically
    }

}

所以我的最终结果是我将拥有以下会话,而不必手动创建所有这些会话。

Session["Value"] = "MyOption"
Session["Value1"] = "MyOption1"
Session["Value2"] = "MyOption2"
Session["Value3"] = "MyOption3"
4

2 回答 2

0

你是在倒退。由于您在 RowDataBound 事件中,显然您是数据绑定。因此,将数据保存在其中Session["DataSource"]或类似的东西中,而不是在逐行绑定时重新创建数据集。

我建议 ViewState 因为它只对那个页面有效。如果您不打算在该页面之外使用数据,则没有理由将其添加到 Session。

您将会话数据用于什么目的?

于 2013-09-10T18:58:40.577 回答
0

您可以创建部分列表。例如:

List<string> sections=GetSectionsList();

为列表中的每个项目创建一个 Session 变量并填充状态,如下所示:

foreach(string section in sections)
{
   Session[section] = GetSectionStatus(section);
}

然后每个部分的 onload 检查部分会话值并采取相应措施。但是有一条建议只有在节的数量相当少的情况下才使用 session 来解决这种情况,比如 2 到 5,否则每个部分的负载上的 db 调用会更好。

于 2013-09-10T19:50:09.027 回答