Оператор С# if в Javascript, Razor/MVC3 - программирование
Подтвердить что ты не робот

Оператор С# if в Javascript, Razor/MVC3

Хорошо, поэтому я пытаюсь использовать оператор if if в своем javascript. В зависимости от логического значения в моей модели функция должна возвращать некоторый html или пустую строку. Это в основном то, что я хочу сделать:

function getSomeHtml() {
var myHtml = '';
@if(Model.UseSomeNiceHtml)
{
<text> 
myHtml += '<div> <p class="label">Whatever</p></div>'; 
</text>
}
return myHtml;
}

Подобный код работает очень хорошо при использовании цикла foreach (в основном заменяя if with foreach в примере выше). С помощью оператора if я получаю сообщение об ошибке "Исходный тег конца" текст "без соответствующего начального тега. Правильно ли сбалансированы ваши начальные и конечные теги?" . Когда я удаляю теги <text>, я получаю сообщение об ошибке "Слишком много символов в символьном литерале" .

Может ли кто-нибудь указать мне в правильном направлении?

Спасибо!:)

4b9b3361

Ответ 1

Хорошо, сначала: спасибо за ваш вклад, это заставило меня задуматься. В конце концов я нашел решение, и проблема заключалась в неэкранированном "/" в закрывающемся теге html. С тегами, которые не были сохранены, мои теги испугались. Во всяком случае, я решил, что поделюсь с вами, как выглядит мой готовый код. Я предполагаю, что это может служить примером того, как использовать как циклы С#, так и if-statements в javascript-функции.

function getSubActivitiesHtml(participantId) {
var html = "";
@{
if(Model.UseSubActivities)
{
<text>
html += "<div class=\"textinput req\"><div class=\"checkbox req\">";
</text>

foreach (var subActivity in Model.SubActivities)
{
<text> 
html += "<p><input id=\"activity_" + participantId + "[email protected](subActivity.Id)\" name=\"Participants[" + participantId + "].SelectedSubActivities\" value=\"@(subActivity.Id)\" type=\"checkbox\" />";
html += "<label for=\"activity_" + participantId + "[email protected](subActivity.Id)\">@(subActivity.Name)</label></p>";
</text>
}

<text>
html += "<\/div><p class=\"label\">Delaktiviteter</p><\/div>";
</text>  
}
}

return html;
}

Обратите внимание, как закрываются теги html...

Ответ 2

Хорошо, здесь что-то работает для меня. Протестировано только сейчас.

function getSomeHtml() {
    var myHtml = '';
    @{
        if (Model.UseSomeNiceHtml)
        {
            <text> 
            myHtml += '<div> <p class="label">Whatever</p></div>'; 
            </text>
        }
    }
    return myHtml;
}

Я добавил дополнительный набор {}.

Ответ 3

попробуйте удалить теги <text> или поместить их в оператор myHtml += '';

Ответ 4

Попробуйте следующее:

  function getSomeHtml() {
    @{
      var myHtml = "";
      if(Model.UseSomeNiceHtml)
      {
        myHtml += "<div> <p class='label'>Whatever</p></div>";
      }
    }
    return "@myHtml";
  }

Ответ 5

Это тоже работает.

function getSomeHtml() {
    var myHtml = '';
    if('@Model.UseSomeNiceHtml' === '@true')
    {
         myHtml += '<div> <p class="label">Whatever</p></div>'; 
    }
    return myHtml;
}