면도기에서 삼항 연산자를 사용하는 방법 (특히 HTML 특성)?


401

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> }

이것은 약간 끔찍하다 .

나는 이와 같은 일을하고 싶지만 면도기의 방법을 이해하는 데 어려움을 겪고 있습니다.

<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>

아직도, 나는 확장 방법으로 감싸지 않고 삼항 연산자를 사용할 수있는 방법이 있기를 바랍니다.


"Best Practice" IHtmlString와 마찬가지로 new HtmlString("Some stuff here");도우미 등을위한 방법 으로 유형 을 반환해야한다고 생각합니다 .
Justin Soliz



답변:


767

@()표현식 구문 을 사용할 수 있어야 합니다.

<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>

그러나 Razor를 설치하지 않았으므로 잘못 될 수 있습니다.


60
다음은 Razor 구문에 대한 간단한 참조입니다. C # Razor Syntax 빠른 참조
Ryan Lundy

<a class=@(User.Identity.IsAuthenticated? "auth" : "anon")> 여기 내 링크 </a>
BiLaL

이 논리에 && 연산자를 추가 할 수 있습니까?
alerya

58

추가:

중요한 개념은 Razor 코드에서 표현식을 평가한다는 것입니다. 이를 수행하는 가장 좋은 방법은 (예를 들어, foreach 루프에있는 경우) 일반적인 방법을 사용하는 것입니다.

Razor에서 일반 메소드를 호출하는 구문은 다음과 같습니다.

@(expression)

이 경우 표현은 다음과 같습니다.

User.Identity.IsAuthenticated ? "auth" : "anon"

따라서 해결책은 다음과 같습니다.

@(User.Identity.IsAuthenticated ? "auth" : "anon")

이 코드는 html 속성뿐만 아니라 Razor의 어느 곳에서나 사용할 수 있습니다.

C # Razor Syntax Quick Reference (Phil Haack의 블로그)에 대한 @Kyralessa의 의견을 참조하십시오.


주요 답변에 유사한 의견을 추가 한 후 부록을 보았습니다.
BiLaL

22

눈을 쉽게하기 위해 더 간단한 버전!

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

11
더 간단하지 않습니다. 그것은 다른 값을 가진 같은 대답입니다
Dave Rael

4
-1 Dave Rael이 맞습니다. 이것은 다른 값을 가진 동일한 코드입니다
Jacques

6
이것은 실제로 삼항 연산자를 설명합니다. 따라서 솔루션의 진정한 중독은 조건에서 진실과 거짓이 어디에 있는지 말하지 않습니다.
Maurizio 덴마크에서

3
나는 그렇게 생각했다. 개발자로서 우리는 명확한 대답을 할 수 있습니다. 때때로.
몬스터 X

17

VB 면도기와 함께 ASP.net을 사용하는 사용자에게는 삼항 연산자도 가능합니다.

또한 면도기 식 안에 있어야합니다.

@(Razor_Expression)

삼항 연산자는 다음과 같이 작동합니다.

If(BooleanTestExpression, "TruePart", "FalsePart")

VB 면도기와 함께 여기에 표시된 동일한 코드 예제는 다음과 같습니다.

<a class="@(If(User.Identity.IsAuthenticated, "auth", "anon"))">My link here</a>

참고 : TextExpression을 작성할 때 부울 기호는 C #과 VB간에 동일하지 않습니다.


1

내 문제에서 내 <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")

0

이 방법을 사용할 수도 있습니다.

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

이것을 시도하십시오. 행운을 빈다.


mvc 조건으로 @를 추가해야합니까? @는 처음에 이미 사용 되었기 때문에 그렇게 생각하지 않습니다.
Mubashar Shahzad

@ ()에서 @을 사용할 필요가 없음
Aikansh Mann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.