Подтвердить что ты не робот

Смешивание текста и функций внутри if/else с помощью MVC Razor

У меня есть следующий код внутри частичного представления:

@if (Request.IsAuthenticated)
{
    Hello, @Html.ActionLink(User.Identity.Name, "ChangePassword", "Account") | Html.ActionLink("Log off", "LogOff", "Account")
}
else
{
    @Html.ActionLink("Log in", "Login", "Account")
}

Ожидаемый результат (с соответствующими ссылками на действия):

  • Если вошел в систему: Hello Jim | Выход из системы
  • Если вы не авторизованы: Войдите в систему

Однако это приводит к ошибкам:

  • В VS, в слове "Hello" есть ошибка: "Не удается разрешить символ" Hello "и" & # "имеет" Expression expected "
  • В браузере я получаю "CS1040: директивы препроцессора должны отображаться как первый символ без пробелов в строке"

Если я положил <p>...</p> вокруг строки, начинающейся с "Hello", ошибка исчезнет.

Существует, очевидно, синтаксическая ошибка с моими вызовами смешивания на @Html и текст в пределах одной строки. Каков правильный способ сделать это?

4b9b3361

Ответ 1

Предполагается, что содержимое кодового блока ({ ... }) будет кодом, а не разметкой.

Если вы хотите поместить текст непосредственно в блок кода, у вас есть три варианта:

  • Оберните его в любой тег HTML
  • Оберните его в специальный тег Razor <text>, который просто отобразит текст без тега
  • Подготовьте строку с помощью @:, которая эквивалентна

Смотрите сообщение в блоге SottGu.