【问题标题】:Turning a boolean into session variable将布尔值转换为会话变量
【发布时间】:2013-11-22 10:12:33
【问题描述】:

关于如何将代码中的“可食用”转换为会话以在不同页面上显示为标签的任何想法。 帮助将不胜感激。

标签会显示类似可以吃的信息

代码如下

public int totalCalories()
        {
            return grams * calsPerGram;
        }
        public string getFruitInfo()
        {
            string s;
            if (edible == true)
            {
                s = fName + " is good and it has " + totalCalories() +
 "calories";
            }
            else
            {
                s = "Hands off! Not edible";
                //edible = Sesion ["ediblesesion"] as bool;
                // Session ["ediblesession"] = edible;
            }
            return s;
        }
    }

【问题讨论】:

  • 你已经知道答案了。只需使用您的注释代码
  • 另外,如果你只是想将数据传递到另一个页面,你可以使用 POST 和 GET。
  • 干杯,伙计们工作不正常,所以我评论了它,但会继续努力。
  • 您不能使用“as bool”,因为 Boolean 不能为空。这就是你可能遇到的问题
  • 谢谢 Haedrian,我需要如何解决这个问题?

标签: c# asp.net visual-studio-2010 boolean session-variables


【解决方案1】:

if 语句内的注释中已经有了设置会话变量的代码:

Session["ediblesession"] = edible;

但是,您可能希望在if 语句外部设置会话变量,这样即使布尔值为true,它也能获得一个值。

当你想在另一个页面中读回该值时,你会得到一个装在一个对象中的布尔值,所以你需要将它转换回一个布尔值:

edible = (bool)Session["ediblesession"];

注意拼写。如果您尝试读取名称为 "ediblesesion" 的会话变量(如您评论中的代码中所示),您将无法获得存储为 "ediblesession" 的变量,并且编译器无法告诉您您做了一个错字,因为它不是标识符。

如果您想读取该值,但可能在没有先设置该值的情况下进入该页面,则需要检查它是否存在:

object value = Session["ediblesession"];
if (value != null) {
  edible = (bool)value;
} else {
  edible = false; // or whatever you want to do if there is no value
}

【讨论】:

  • 好的,谢谢 Guffa,我会努力让它工作并让你知道。
  • 您不能对值类型使用as 运算符,例如bool;因此这条线edible = Session["ediblesession"] as bool; 是不允许的。如果 bool 可以为空,那就另当别论了。
  • @KarlAnderson:你说的太对了。感谢您的指正。我删除了那个例子,只留下我已经添加的演员表。 :)
  • 您可以使用较新的版本:bool edible= Session["ediblesession"] as bool? ?? false;
【解决方案2】:

设置:

this.Session["Edible"] = myBoolean;

获取:

myBoolean = (bool) this.Session["Edible"];

【讨论】:

  • 我需要在同一页面上执行此操作吗?
  • 没有。只要不超时,会话就会持续(您可以在配置文件中设置 - 以小时为单位)。如果您只想将 Viewstate 用于同一页面,则可以以类似的方法使用它。
  • 设置在一页中。从对方那里读取(获取)它。
  • @Haedrian:会话超时以分钟为单位,而不是小时。 <sessionState timeout="20" /> 表示 20 分钟,而不是 20 小时。参考:msdn.microsoft.com/en-us/library/h6bb9cz9%28vs.80%29.aspx
  • 对不起 - 我的意思是它通常以小时为单位。不是可能过期的东西(因为你会把用户踢出去)
【解决方案3】:
bool? edible;
object object_edible = Session["session_edible"];
if (object_edible != null)
    edible = object_edible  as bool?;
else
    edible = false;

'bool'是c#中不可为空的值类型,bool?是可以为空的类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2016-04-27
    • 2012-02-25
    • 2015-02-20
    • 1970-01-01
    • 2016-09-21
    • 2021-06-27
    相关资源
    最近更新 更多