Оператор С# 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>
, я получаю сообщение об ошибке "Слишком много символов в символьном литерале" .
Может ли кто-нибудь указать мне в правильном направлении?
Спасибо!:)
Ответы
Ответ 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;
}