사용하는 방법 ? : Razor 및 인라인 코드 블록이있는 if 문


154

새 Razore보기 엔진으로 이전 .aspx보기를 업데이트하고 있습니다. 다음과 같은 코드가있는 곳이 많이 있습니다.

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>

이상적으로 나는 이것을하고 싶습니다 :

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>

그러나 여기에는 두 가지 문제가 있습니다.

  1. vote-up@{puzzle.UserVote .... @ 기호를 코드 블록의 시작으로 취급하지 않습니다
  2. @puzzle.UserVote == VoteType.Up@puzzle.UserVote변수의 값을 렌더링하는 것처럼 첫 번째 부분 을 봅니다.

이 문제를 해결하는 방법을 아는 사람이 있습니까?


6
나는 Razor를 사용하지는 않았지만 내가보고있는 것에 기초하여 시도해보십시오@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
Lasse Espeholt

이것이 면도기의 인라인 삼항 연산자의 최고 결과이므로, 출력에 html 또는 아포스트로피와 같은 인코딩 가능한 문자 (예 : @(isSomething ? "class='test'" : "")javascript 또는 이와 유사한 것을 삽입 하는 경우)가 포함되어 있으면 &#39;페이지와 같은 엔티티로 인코딩 되어 페이지가 손상됩니다. 따라서를 사용해야합니다 Html.Raw(".."). 그렇지 않으면 위의 코드를 사용하면 <p class=&#39;test&#39;>잘못된 것으로 끝날 것입니다 .
NibblyPig 2016 년

답변:


298

이것은 작동해야합니다 :

<span class="vote-up@(puzzle.UserVote == VoteType.Up ? "-selected" : "")">Vote Up</span>

2
괄호 대신
파렌

32

핵심은 @ 구분 기호 뒤에 식을 괄호로 묶는 것입니다. 이런 식으로 복합 표현식을 작동시킬 수 있습니다.


28
@( condition ? "true" : "false" )

1
나는이 하나에 들어갑니다 깨끗한 느낌 나중에 다시 읽기 쉬운
댄 해리스에게

1
ToString ()을 호출하는 대신 속성 (문자열 포함)의 값을 표시 해야하는 경우 내 경우에는 작동하지 않습니다. 당신은 이것을 할 수 있습니다 @ (condition? $ "{foo.bar}": "Default")
Dan Harris

6

대부분의 경우 CD 솔루션 은 완벽하게 작동합니다. 그러나 나는 조금 더 왜곡 된 상황을 겪었습니다.

 @(String.IsNullOrEmpty(Model.MaidenName) ? "&nbsp;" : Model.MaidenName)

이렇게하면 "& nbsp;"가 표시됩니다. 내 페이지에서 각각 source를 생성하십시오 &amp;nbsp;. 이제이 Html.Raw("&nbsp;")별자리에서 컴파일러 오류가 발생하는 것을 제외하고 소스 코드를 작성할 수 있는 기능 이 있습니다.

컴파일러 오류 메시지 : CS0173 : 'System.Web.IHtmlString'과 'string'사이에 암시 적 변환이 없으므로 조건식 유형을 확인할 수 없습니다.

그래서 나는 다음과 같은 진술을 작성하게되었습니다. 이는 좋지 않지만 제 경우에도 작동합니다.

@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw("&nbsp;") } else { @Model.MaidenName } 

참고 : 흥미로운 것은 중괄호 안에 들어가면 Razor 블록을 다시 시작해야한다는 것입니다.


왜 그렇게@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw("&nbsp;") : Model.MaidenName)
JP Hellemons

어 .. 앞서 언급 한 컴파일러 오류 때문에 어떻습니까? ;)
Damian Vogel

3
미안 해요 :) 더 커피를 필요
JP Hellemons

1
삼항 연산자의 양쪽을 같은 유형으로 만들어 오류를 피할 수 있습니다.@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw("&nbsp;") : Html.Raw(Model.MaidenName))
NibblyPig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.