将布尔值转换为会话变量

Posted

技术标签:

【中文标题】将布尔值转换为会话变量【英文标题】: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,我需要如何解决这个问题? 【参考方案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?是可以为空的类型

【讨论】:

以上是关于将布尔值转换为会话变量的主要内容,如果未能解决你的问题,请参考以下文章

无法将“查询”类型的值转换为预期的条件类型“布尔”

将 UITextField 文本值转换为布尔值

返回值为布尔值的方法

如何将布尔值列表转换为单个 int,其中每个布尔值都被解释为位?

PL/SQL 将字符串转换为布尔值

Python:将字符串列表转换为布尔值,其中布尔值以字符串形式存在[重复]