带有MVC4 / Razor 2的条件属性中的布尔字符串比较会返回意外结果

时间:2012-11-19 09:38:16

标签: css attributes asp.net-mvc-4 conditional razor-2

使用Razor 2将我的MVC 3解决方案升级到MVC 4后,我遇到了以下问题。

视图中的此代码

@{
    string main = "archive";
}
    <div class="selected-@(main == "archive")"></div>

在MVC 3中返回

<div class="selected-True"></div>

这在MVC 4中

<div class="selected-class"></div>

打破了我的CSS。

这是Razor 2中新条件属性功能引入的错误吗?

我的解决方法是:

<div class="selected-@((main == "archive").ToString())"></div>

返回:

<div class="selected-True"></div>

有没有人有更好的建议?

3 个答案:

答案 0 :(得分:2)

作为替代方案:

<div class="selected-@(main == "archive" ? "true" : "false")"></div>

答案 1 :(得分:1)

为什么不将此类作为视图模型的一部分,例如

public string MainClass {
            get { 
                if(main=="archive") return "True";
                return "False";
            }
}

并在您的视图中使用此

<div class="selected-@MainClass"></div>

Razor2对它的视图编译更严格。

答案 2 :(得分:0)

我的错误或非问题在这里得到解答:https://stackoverflow.com/a/13455272/533460

这不是一个bug,它是Razor 2的新功能!

我的代码中发生的事情是基于这个原则

<input checked="@ViewBag.Checked" type="checkbox"/>

变为

<input checked="checked" type="checkbox"/>

当ViewBag.Checked == true。

所以

<div class="@(main == "archive")"></div>

变为

<div class="class"></div>

感谢@webdeveloper(https://stackoverflow.com/users/1667969/webdeveloper)指出我的答案。