Как использовать тернарный оператор в razor (в частности, на атрибутах HTML)?
С помощью механизма просмотра WebForms я обычно использую тернарный оператор для очень простых условных обозначений, особенно в атрибутах HTML. Например:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
приведенный выше код даст <a> тег класса auth или anon в зависимости от того, является ли пользователь проверку подлинности.
что такое эквивалентный синтаксис с Razor view engine? Поскольку 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>
тем не менее, я надеюсь, что есть способ использовать тернарный оператор, не возвращаясь к обертыванию его в метод расширения.
6 ответов:
вы должны быть в состоянии использовать
@()выражения синтаксис:<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>У меня нет установленной бритвы, поэтому я могу ошибаться.
дополнение:
важная концепция заключается в том, что вы оцениваете выражение в своем коде Razor. Лучший способ сделать это (если, например, вы находитесь в цикле foreach) с помощью универсального метода.
синтаксис вызова универсального метода в Razor:
@(expression)в этом случае выражение:
User.Identity.IsAuthenticated ? "auth" : "anon"поэтому решение такое:
@(User.Identity.IsAuthenticated ? "auth" : "anon")этот код может быть использован в любом месте в Razor, а не только для html атрибут.
см. комментарий @Kyralessa для краткой ссылки на синтаксис C# Razor (блог Фила Хаака).
для тех из вас, кто использует ASP.net с бритвой VB тернарный оператор также возможен.
это должно быть, а также, внутри бритвы выражение:
@(Razor_Expression)и тернарный оператор работает следующим образом:
If(BooleanTestExpression, "TruePart", "FalsePart")тот же пример кода, показанный здесь с VB razor, выглядит так:
<a class="@(If(User.Identity.IsAuthenticated, "auth", "anon"))">My link here</a>Примечание: при написании TextExpression помните, что булевы символы не совпадают между C# и VB.
в моей проблеме я хочу текст якоря
<a>text</a>в моем представлении, чтобы основываться на некотором значении и этот текст извлекается формаApp string Resourcesэтот
@()решение<a href='#'> @(Model.ID == 0 ? Resource_en.Back : Resource_en.Department_View_DescartChanges) </a>если текст не из
App string Resourcesиспользовать@(Model.ID == 0 ? "Back" :"Descart Changes")
вы также можете использовать этот метод:
<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">попробуйте это .. Удача Спасибо.
Comments