Сравнение логических строк в условном атрибуте с MVC4/Razor 2 возвращает неожиданные результаты

После обновления моего решения MVC 3 до MVC 4 с помощью Razor 2 я столкнулся со следующей проблемой.

Этот код в представлении

@{
    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>

У кого-нибудь есть лучшее предложение?


person Frank van Eykelen    schedule 19.11.2012    source источник


Ответы (3)


В качестве альтернативы:

<div class="selected-@(main == "archive" ? "true" : "false")"></div>
person webdeveloper    schedule 19.11.2012
comment
Но тогда с True и False, потому что Boolean.TrueString — это True, а не true. - person Frank van Eykelen; 19.11.2012
comment
@FrankvanEykelen Спасибо, я знал это, но, если возможно, я бы порекомендовал вам использовать преобразование имен, его легче читать. - person webdeveloper; 19.11.2012
comment
@FrankvanEykelen Также посмотрите на этот вопрос: заголовок stackoverflow.com/questions/13455270/ - person webdeveloper; 19.11.2012

Почему бы не использовать этот класс как часть вашей модели представления, например.

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

и используйте это в своем представлении

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

Razor2 более строг с компиляцией представлений.

person dove    schedule 19.11.2012

Ответ на мой вопрос об ошибке или нет здесь: https://stackoverflow.com/a/13455272/533460

Это не ошибка, это новая функция Razor 2!

То, что происходит в моем коде, основано на этом принципе

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

становится

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

когда ViewBag.Checked == true.

So

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

становится

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

Спасибо @webdeveloper (https://stackoverflow.com/users/1667969/webdeveloper) за указание на ответ.

person Frank van Eykelen    schedule 19.11.2012