Как использовать тернарный оператор в 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>


тем не менее, я надеюсь, что есть способ использовать тернарный оператор, не возвращаясь к обертыванию его в метод расширения.

976   6  

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 (блог Фила Хаака).

более простая версия, для легких глаз!

@(true?"yes":"no")

для тех из вас, кто использует 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

    Ничего не найдено.