【问题标题】:Dynamically Create Different Session Variables动态创建不同的会话变量
【发布时间】:2013-09-11 12:27:39
【问题描述】:

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

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

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"

【问题讨论】:

  • 您想对这些项目中的每一项进行 Session 做什么?为什么不将数据集合存储在 Session(或者更好的 ViewState)中,然后在用户单击按钮时从集合中获取正确的项目?
  • 我编辑了我的问题以显示我试图完成的最终结果,我希望我会根据这些会话值在我的页面中执行验证。不确定 viewstate 将不得不尝试,看看它是否会工作
  • 您想达到什么目的,可能有比创建所有这些会话更好的解决方案?

标签: c# asp.net session-variables


【解决方案1】:

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

List<string> sections=GetSectionsList();

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

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

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

【讨论】:

  • 谢谢 Shashank 基本上我有一个应用程序,它在登录页面上分为多个部分,该页面是一个显示应用程序部分\状态的网格视图。如果状态已提交,我不希望它能够加载那个“sections”.aspx 页面,所以我想我可以根据 gridview 中的值创建一些会话,然后进行快速会话检查并根据它重定向它们.
  • 如果我理解不正确,请纠正我。您的网格上有几个部分及其各自的状态。如果状态已提交,那么您不希望允许用户重定向到该部分。如果我的理解是正确的,那么请告诉我用户如何导航到相应的部分(单击链接按钮?,它位于网格的每一行上的什么位置,或者一个公共按钮会按顺序将您带到未完成的部分? )。
  • 网格上的部分是一个链接,一旦单击,我将一个 url 附加到该部分的值。我正在禁用链接,因此用户在提交后无法单击该部分,但是如果您要手动浏览到该页面,它仍然允许您因此我想对会话执行简单检查的原因取决于它是否提交与否
  • 好的,然后简单地创建所有部分的列表,然后为列表中的每个项目创建会话值。每个部分的页面加载只是检查特定的会话值。
  • 我已经根据我们的讨论更新了我的答案。如果有帮助,请将其标记为答案。
【解决方案2】:

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

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

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

【讨论】:

  • 我正在使用会话根据会话的值允许或不允许访问其他页面
  • 不确定 ["DataSource"] 是什么意思...我希望 Session[gridviewrowvalue] = gridview 不同的行值
  • 这根本不是一个好主意。查找成员资格提供者和角色。 MSFT 已经在这里创建了轮子,你只需要将它附加到你的代码中。
  • 这不是一个好主意是不可能的吗?因为对于我正在做的小型应用程序,我怀疑我将成员资格提供程序和角色仅用于这个简单的任务是否有意义
  • 如果你的角色多于“Admin”和“User”,我建议使用框架。应用程序在使用时范围会不断扩大,您的“小型”应用程序可能会成为不断增长的关键应用程序。你需要一个坚实的基础来扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多