Razor: конец блока foreach не отображается после оператора if

Итак, у меня есть следующий код в .net Razor:

<div id="menu_left" class="menu_item">

    @foreach (var mainMenuItem in Model)
            {

                    string link ="";
                    string nameLower = @mainMenuItem.ItemName.ToLower();
                    if (mainMenuItem.SubItem.Count() > 0)
                                  {
                                    link +="javascript:submenu('";
                                    link += nameLower + "_dropdown";
                                    link += "', 'dropdown_menu' );";
                                  } 
                     else 
                                  {
                                         link = mainMenuItem.Link;
                                  }
                      }

                <a href="@link" class="menu_a">
                    <img src="@mainMenuItem.Image" class="menu_link" id="@mainMenuItem.ItemName.ToLower()" />
                </a>

            }

    </div>

но когда я пытаюсь запустить его, компилятор .net отображает строку в конце инструкции if как литерал html, а не компилирует ее как код, как показано в следующем разделе исходного кода компиляции:

Line 145:  WriteLiteral(@"                         else 
Line 146:                                        {
Line 147:                                               link = mainMenuItem.Link;
Line 148:                                        }
Line 149:                            }

Я попытался обернуть все это в блок кода @ {}, чтобы он знал, что это код, но затем компилятор, кажется, заканчивает блок неправильной фигурной скобкой, например той, что находится в конце цикла foreach.

Я видел других людей на SO, у которых была такая же проблема, когда внутри оператора if есть html, но внутри этого блока нет html.

Как заставить остальную часть моего кода отображаться как код?


person jimboweb    schedule 09.04.2016    source источник


Ответы (1)


Удалить из

 @mainMenuItem.ItemName.ToLower();

Вам нужен только символ @, когда вы запускаете код c# и когда вы смешиваете его с html.

Например, в этом случае вам понадобится символ @ для отображения значения nameLower:

@foreach (var mainMenuItem in Model)
{

    string link = "";
    string nameLower = mainMenuItem.ItemName.ToLower();

    <div>
        some html
        @nameLower
    </div>
}
person Vano Maisuradze    schedule 09.04.2016
comment
О, да, это было так! Спасибо, я приму этот ответ, как только SO позволит мне. - person jimboweb; 09.04.2016