MVC其他如果没有触发

时间:2014-07-03 18:17:31

标签: c# asp.net-mvc razor

我正在使用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)它表示没有客户登录

enter image description here

2)它没有说什么

enter image description here

3)与数据库条目相同的拼写

enter image description here

1 个答案:

答案 0 :(得分:2)

在您查看我的评论并修复了问题之后,问题是Role的源列是nchar(15)charnchar将填充其值以填充为值保留的整个空间。例如,如果允许空值,则nchar(15)将始终为15个字符长或空。

在比较代码中的字符串之前修剪数据库值将解决问题。在代码(myString.Trim())中修剪字符串或在数据库中修剪它(LTRIM(RTRIM(role)))。

除非旧版支持需要charnchar类型,否则您应考虑将列类型更改为varcharnvarchar。请注意,在更改其数据类型后,您最初需要修剪该列的所有数据,因为空白仍然存在。