С движком представления WebForms я обычно использую троичный оператор для очень простых условий, особенно в атрибутах HTML. Например:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Приведенный выше код даст <a>
тегу класс auth
или в anon
зависимости от того, аутентифицирован ли пользователь.
Каков эквивалентный синтаксис с движком Razor? Поскольку Razor требует HTML-теги, чтобы «знать», когда нужно вставлять и выходить из кода и разметки, в настоящее время я застрял в следующем:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Это, мягко говоря, ужасно .
Я хотел бы сделать что-то подобное , но я пытаюсь понять, как в Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Обновить:
Тем временем я создал этот HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
который можно так назвать из Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Тем не менее, я надеюсь, что есть способ использовать троичный оператор, не прибегая к обертыванию его в методе расширения.
razor
asp.net-mvc-3
Портман
источник
источник
IHtmlString
с методомnew HtmlString("Some stuff here");
для помощников и т. Д.Ответы:
Вы должны быть в состоянии использовать
@()
синтаксис выражения:У меня не установлена Razor, поэтому я могу ошибаться.
источник
Приложение:
Важной концепцией является то, что вы оцениваете выражение в своем коде Razor. Лучший способ сделать это (например, если вы находитесь в цикле foreach) - использовать универсальный метод.
Синтаксис для вызова универсального метода в Razor:
В этом случае выражение:
Следовательно, решение состоит в следующем:
Этот код можно использовать где угодно в Razor, а не только для атрибута html.
См. Комментарий @Kyralessa к краткому справочнику по синтаксису C # Razor (блог Фила Хаака).
источник
Более простая версия, для легких глаз!
источник
Для тех из вас, кто использует ASP.net с бритвой VB, также возможен троичный оператор.
Это также должно быть внутри бритвенного выражения:
и троичный оператор работает следующим образом:
Тот же пример кода, показанный здесь с бритвой VB, выглядит следующим образом:
Примечание: при написании TextExpression помните, что логические символы не одинаковы между C # и VB.
источник
в моей проблеме я хочу, чтобы текст привязки
<a>text</a>
внутри моего представления основывался на некотором значении, и этот текст извлекается из формыApp string Resources
Итак, это
@()
решениеесли текст не из
App string Resources
этого использованияисточник
Вы также можете использовать этот метод:
Попробуйте это .. Удачи Спасибо.
источник