我正在使用MVC5剃须刀,我目前正在制作用户个人资料/帐户页面。如果Session Value为null,我似乎只能触发它。但是当我得到它应该得到的信息时,它就不会触发。
<div id="sidePanelBar">
@{
if (Session["CustomerRole"] == null)
{
<text>no Customer is logged in</text>
}
else if (Convert.ToString(Session["CustomerRole"]) == "user")
{
<text>Standard User</text>
}
else if (Convert.ToString(Session["CustomerRole"]) == "admin")
{
<text>Administrator</text>
}
}
</div>
我已经尝试删除转换器.ToString,我尝试使用.toString()而不是我已经删除了其他如果并且只有3个单独的if语句。我尝试的一切似乎都没有触发。只有在它为null时才会触发它。 当我调试它时会触及这一行,但是没有任何东西来自它,它只是跳过它,好像“用户”和“管理员”不在那里,但如果我将会话内容输出到我的HTML中它们就在那里。所以我100%知道会话有角色信息。
以下是3个截图:
1)它表示没有客户登录
2)它没有说什么
3)与数据库条目相同的拼写
答案 0 :(得分:2)
在您查看我的评论并修复了问题之后,问题是Role
的源列是nchar(15)
。 char
和nchar
将填充其值以填充为值保留的整个空间。例如,如果允许空值,则nchar(15)
将始终为15个字符长或空。
在比较代码中的字符串之前修剪数据库值将解决问题。在代码(myString.Trim()
)中修剪字符串或在数据库中修剪它(LTRIM(RTRIM(role))
)。
除非旧版支持需要char
或nchar
类型,否则您应考虑将列类型更改为varchar
或nvarchar
。请注意,在更改其数据类型后,您最初需要修剪该列的所有数据,因为空白仍然存在。