Почему Razor не нравится?
У меня возникла мега раздражающая проблема. У меня есть представление:
@{
if(ViewBag.Section == "Home")
{
<div id="headerfrontPage">
}
else
{
<div id="header">
}
}
И я получаю ошибку компиляции:
В блоке кода отсутствует символ закрытия "}" . Убедитесь, что у вас есть соответствующий "}" символ для всех символов "{" в этом блоке, и что ни один из символов "}" не интерпретируется как разметка.
Как я могу условно написать div? Его для взлома в основном...
Ответы
Ответ 1
Я подозреваю, что это потому, что ваши div не закрыты, поэтому бритва предполагает, что закрывающая фигурная скобка фактически является частью содержимого div.
Вы можете попробовать вывести весь контент div внутри вашего кода там, включая закрывающий тег, или вывести тег div с помощью Response.Write или что-то подобное, поэтому нет путающей разметки.
РЕДАКТИРОВАТЬ: также, возможно, вставляя тэг div в
<text></text>
может стоить попробовать.
Ответ 2
Вы можете использовать ту же конструкцию, когда вы обертываете свой элемент div внутри, например:
@if (ViewBag.Section == "Home")
{
<text><div id="headerfrontPage"></text>
}
else
{
<text><div id="header"></text>
}
Или вы используете синтаксис бритвы @: like
@if (ViewBag.Section == "Home")
{
@:<div id="headerfrontPage">
}
else
{
@:<div id="header">
}
Но для вашей текущей ситуации я предпочел бы решение Ron Sijm:
@{
var divName = ViewBag.Section == "Home" ? "headerfrontPage" : "header";
}
<div id="@divName">
Ответ 3
Вы можете попробовать следующее:
@{
string divName;
if(ViewBag.Section == "Home")
{
divName = "headerfrontPage";
}
else
{
divName = "header";
}
}
<div id="@divName">
Я не уверен, что это поможет, это длинный выстрел. Но по крайней мере imo, который выглядит лучше...
Ответ 4
Попробуйте следующее:
@if (ViewBag.Section == "Home")
{
<text> <div id="headerfrontPage"> </text>
}
else
{
<text> <div id="header"> </text>
}
Ответ 5
Самый простой способ написать это:
<div id="@(ViewBag.Section == "Home" ? "headerFrontPage" : "header")">
Или, если хотите, вы можете использовать локальную переменную:
@{ var headerID = ViewBag.Section == "Home" ? "headerFrontPage" : "header"; }
<div id="@headerID">
Что касается более общего случая незакрытых тегов в блоках кода Razor, вы можете явно отмечать открывающий тег как контент:
@if (ViewBag.Section == "Home")
{
@:<div id="headerFrontPage">
}
else
{
@:<div id="header">
}