将会话变量值与字符串进行比较

6

我正在将会话变量与字符串进行比较,以检查登录类型是否为管理员。

我使用的代码:

if (Session["loggedInUsername"] == null)
        {
            btnLogin.Text = "Sign In";
            lblWelcome.Text = "Welcome!";
            hypManageRestaurants.Enabled = false;
            hypManageReviews.Enabled = false;
            hypPostReviews.Enabled = false;

        }
        else
        {
            if (Session["loggedInUserType"] == "Administrator")
            {
                hypManageRestaurants.Enabled = true;
                hypManageReviews.Enabled = true;
                hypPostReviews.Enabled = true;
            }
            else
            {
                hypManageRestaurants.Enabled = false;
                hypManageReviews.Enabled = false;
                hypPostReviews.Enabled = true;
            }
            lblWelcome.Text = "Welcome " + Session["loggedInUsername"];

            btnLogin.Text = "Sign Out";
        }

首先,我正在检查是否有任何用户已经登录。如果用户成功登录,会话变量“loggedInUsername”将具有用户名的值。如果“loggedInUsername”会话变量不为空,则会检查“loggedInUserType”会话变量以获取已登录用户的类型。

这里出现了奇怪的事情,“loggedInUserType”的值恰好为“Administrator”,没有引号,当我将会话变量与字符串“Administrator”进行比较时,if函数被跳过并进入else。

所有会话变量在用户登录时都会获得值。

以下是我用于登录的数据,这条记录是唯一具有“Administrator”类型的记录。

图片链接

是否有其他方法将会话变量与字符串进行比较?


你的意思是它被跳过了吗?它是否进入了else语句?这可能是一个类型转换问题。尝试使用Object.ReferenceEquals(a,b)或者"Administrator".Equals(Session["..."])。 - Thinking Sites
1
使用会员提供程序 - Tim Schmelter
8个回答

5

将对象类型的值转换为字符串

((string)Session["loggedInUserType"]) == "Administrator"

5

尝试:

如果(Convert.ToString(Session["loggedInUserType"]) == "管理员")...


这种方法也可以 :) 但我不知道是否可以标记两个答案 xD - drinu16

1

试试这个:

if (Session["loggedInUserType"].ToString().Trim()
        .Equals("Administrator", StringComparison.InvariantCultureIgnoreCase))

1

Session 集合返回 Object 类型的值,因此当您将其与字符串进行比较时,您将比较对象引用的值,而不是比较字符串值。

将对象引用转换为 string

if (((string)Session["loggedInUserType"]) == "Administrator")

0
if(Convert.ToString(Session["loggedInUserType"]) == "Administrator)

这样做的好处是,无需检查空值,因为Convert.ToString会处理空值并返回空字符串""。


0
你可以这样做:
string session = (string)Session["loggedInUserType"]

if (session == "Administrator")

或者你的Session可以在一个具有getter方法的特定类中。


0
if (Session["loggedInUserType"].ToString() == "Administrator")

0

你确定Session["loggedInUserType"]末尾的所有空格都被删除了吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接