Ответ 1
Вам нужно будет обернуть секцию нарушения в тегах <text>
. См. Этот ответ: fooobar.com/questions/308523/...
Я пытаюсь настроить раскрывающееся меню, которое вытаскивает из Datatable. Это отлично подходит для первого уровня меню.
Рабочий код:
<ul class="dropdown-menu">
@foreach (System.Data.DataRow dr in menu.Rows)
{
if (Level1 != dr["Level1"].ToString())
{
<li><a href="#">@dr["Level1"].ToString()</a></li>
Level1 = @dr["Level1"].ToString();
}
}
</ul>
Проблема возникает, когда я пытаюсь добавить вложенный оператор if. Если вы поместите этот код в Visual Studio, вы заметите, что закрывающая скобка для цикла @foreach
не распознается Razor.
Разрывы кода:
<ul class="dropdown-menu">
@foreach (System.Data.DataRow dr in menu.Rows)
{
if (Level1 != dr["Level1"].ToString())
{
<li><a href="#">@dr["Level1"].ToString()</a></li>
Level1 = @dr["Level1"].ToString();
if (Level2 != dr["Level2"].ToString())
{
<li><a href="#">@dr["Level2"].ToString()</a></li>
Level2 = @dr["Level2"].ToString();
}
}
} <!-- the issue is the bracket on this line -->
</ul>
Вам нужно будет обернуть секцию нарушения в тегах <text>
. См. Этот ответ: fooobar.com/questions/308523/...
Я не думаю, что вам нужно написать @
перед @dr[...]
в строках, где вы присваиваете значение LevelX
<ul class="dropdown-menu">
@foreach (System.Data.DataRow dr in menu.Rows)
{
if (Level1 != dr["Level1"].ToString())
{
<li><a href="#">@dr["Level1"].ToString()</a></li>
Level1 = dr["Level1"].ToString(); // no need here
if (Level2 != dr["Level2"].ToString())
{
<li><a href="#">@dr["Level2"].ToString()</a></li>
Level2 = dr["Level2"].ToString(); // and no need here
}
}
} <!-- the issue is the bracket on this line -->
</ul>
Чтобы решить вопрос, почему закрывающая скобка не распознается.
TL; DR
Поскольку вы снова в области кода, вам не нужен @
-sign.
Подробнее
Раздел <li>...</li>
определяет html-область, где текст интерпретируется как html.
Непосредственно после закрытия </li>
активная область внешнего кода снова активна, а текст интерпретируется как С# -code. Поэтому возможно присвоение Level1
. Добавление @
-sign в dr
здесь имеет те же последствия, что и в "нормальном" cs файле:
Это синтаксическая ошибка.
В соответствии с этим ответом, если строка интерпретируется как разметка вместо кода, поставьте @перед ней. Если строка интерпретируется как код вместо разметки, поставьте @: перед ней.