【问题标题】:How to get all session variables which name starts with a particular string?如何获取名称以特定字符串开头的所有会话变量?
【发布时间】:2014-03-29 10:55:27
【问题描述】:

我正在使用 C# 在 ASP.NET 中开发应用程序。在我的代码中,我正在创建多个会话。在下一页中,我想获取名称以特定字符串开头的所有会话值。我该怎么做?

假设在我的页面中,我正在创建 5 个会话名称为 gs_text1gs_text5 的会话,并创建另外 10 个名称为 es_label1es_label10 的会话。现在在下一页上,我想为名称以es 开头的所有会话添加一些值。如何在 ASP.NET 中做到这一点?

【问题讨论】:

  • 您是指实际的 ASP.NET 会话,还是基于您的业务领域的某个“会话”?
  • @ColinMackay 其实我说的是 ASP.Net 会话变量,它将从后面的代码中操作。

标签: c# asp.net session


【解决方案1】:

HttpSessionState object 上有一个名为Keys 的属性,它将返回您在会话中放置的所有项目的密钥。您可以使用 linq 或其他方式搜索这些键,以获取以给定值开头的所有键。然后,您可以遍历它们并做任何您想做的事情。

var requiredKeys = Session.Keys.Where(x=>x.StartsWith("es"));
foreach (var key in requiredKeys)
{
    //Do Stuff here
} 

注意当您说您正在创建“5 个会话名称为 [blah] 的会话”时,我假设您的意思是您将对象放入会话中,并将这些名称作为键。如果这不是您的意思,那么您可能需要返回并解释为什么要创建多个会话,以便我们更好地理解...

【讨论】:

  • 我尝试使用您的代码,但实际上它不起作用,它给了我一个错误,它显示“没有 Where 的定义”。我正在声明会话变量,如 "Session["es_label1"] = hfESTitle.Value.Trim(); Session["es_label2"] = hfESPhoneNumber.Value.Trim();"
  • Enumerable (msdn.microsoft.com/en-us/library/…) 的扩展方法在哪里。您可能需要包含 using System.Linq 才能使其正常工作,或者如果您使用的是旧版本的 C#/.NET,您可能无法使用它。最主要的是 Session.Keys 包含所有键,您可以遍历它们并使用字符串 StartsWith 方法来确定它是否是您想要的。
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
相关资源
最近更新 更多