Оператор C # if в Javascript, Razor / MVC3 - PullRequest
18 голосов
/ 13 марта 2012

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

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

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

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

Спасибо! :)

Ответы [ 5 ]

31 голосов
/ 13 марта 2012

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

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

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

9 голосов
/ 14 марта 2012

Хорошо, во-первых: спасибо за ваш вклад, это заставило меня задуматься.В конце концов я нашел решение, и проблема заключалась в том, что в закрывающем HTML-теге не было «/».Без этих тегов мои теги вышли из строя.В любом случае, я решил поделиться с вами тем, как выглядит мой законченный код.Я предполагаю, что это может служить примером того, как использовать и циклы C # и операторы if в функции 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 + "_@(subActivity.Id)\" name=\"Participants[" + participantId + "].SelectedSubActivities\" value=\"@(subActivity.Id)\" type=\"checkbox\" />";
html += "<label for=\"activity_" + participantId + "_@(subActivity.Id)\">@(subActivity.Name)</label></p>";
</text>
}

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

return html;
}

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

1 голос
/ 13 марта 2012

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

0 голосов
/ 27 ноября 2017

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

function getSomeHtml() {
    var myHtml = '';
    if('@Model.UseSomeNiceHtml' === '@true')
    {
         myHtml += '<div> <p class="label">Whatever</p></div>'; 
    }
    return myHtml;
}
0 голосов
/ 13 марта 2012

Попробуйте это:

  function getSomeHtml() {
    @{
      var myHtml = "";
      if(Model.UseSomeNiceHtml)
      {
        myHtml += "<div> <p class='label'>Whatever</p></div>";
      }
    }
    return "@myHtml";
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...