Рендеринг разного HTML в зависимости от значения переменной - PullRequest
1 голос
/ 21 февраля 2012

Я хочу использовать синтаксис C # и Razor, чтобы проверить, был ли установлен cookie. Если он был установлен, я хочу показать

<h2> Cookie set </h2>.

Если нет, я хочу отобразить

<h2>Cookie not set</h2>

Итак, чтобы рассмотреть несколько вещей, у меня есть этот параметр cookie:

//set cookie
HttpCookie cookie = Request.Cookies.Get("stackOverflowCookie");
if(cookie == null) {
   cookie = new HttpCookie("stackOverflowCookie");
   cookie.Value = "Hi guys!";
   cookie.Expires = DateTime.Now.AddDays(1);
   Response.Cookies.Add(cookie);

Используя Razor, как лучше синтаксически воспроизвести то, что я хочу? Все, что я пробую, приводит к ошибкам компиляции:

@{
     if(Request.Cookies["stackOverflowCookie"] == null){ 
        //some other logic is here in my actual code, so an inline statement is not sufficient
        <h2> Cookie set </h2>
@}
@{ else {

<h2> Cookie not set </h2>

@}

Очевидно, это ужасно, и это не работает. Это действительно показывает функциональность, которую я хотел бы тем. Как лучше всего добиться этой функциональности?

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

Если ваша логика оператора длиннее, чем позволяет однострочный, вы можете просто установить переменную в блоке кода:

@{
    var isCookieSet = Request.Cookies["stackOverflowCookie"] == null && otherConditions;
}

И тогда ваш код бритвы может выглядеть так:*

@if (isCookieSet) { 
    <h2>Cookie set</h2>
} else {
    <h2>Cookie not set</h2>
}
1 голос
/ 21 февраля 2012

Просто помните, что нужно быть осторожным с логикой в ​​пользовательском интерфейсе (т. Е. В представлении).

Возможно, вы захотите отредактировать View-Model, чтобы включить значение cookie, и отобразитьразличный пользовательский интерфейс в зависимости от этой переменной с использованием простого оператора IF:

@if(model.CookieProperty != null) {
  <h2>Cookie is set</h2>
} else {
  <h2>Cookie is not set</h2>
}

И затем контроллер читает файл cookie и устанавливает свойство View-Model:

model.CookieProperty = Request.Cookies["cookieName"];

Преимуществаэто:

  • Контроллеру может потребоваться «включить функциональность» или выполнить другую логику в зависимости от этого значения
  • Тестирование: проверить элементы пользовательского интерфейса сложно.Легко проверить View-Model.
0 голосов
/ 21 февраля 2012

Вы можете попробовать что-то вроде

@if(Request.Cookies["stackOverflowCookie"] == null) { 
    <h2> Cookie set </h2>
} else {
    <h2> Cookie not set </h2>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...