programing

사용 방법 ? : if 문에 레이저 및 인라인 코드가 차단

powerit 2023. 5. 18. 21:29
반응형

사용 방법 ? : if 문에 레이저 및 인라인 코드가 차단

새로운 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마치 변수의 값을 렌더링하는 것처럼.

이 문제들을 해결하는 방법을 아는 사람?

이렇게 하면 됩니다.

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

핵심은 @ 구분 기호 뒤에 괄호로 표현식을 캡슐화하는 것입니다.이러한 방식으로 모든 복합 표현식을 사용할 수 있습니다.

대부분의 경우 CD해결책은 완벽하게 잘 작동할 것입니다.하지만 저는 조금 더 꼬인 상황이 있었습니다.

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

이렇게 하면 페이지에 &nbsp;가 인쇄되어 각각 소스가 생성됩니다.&amp;nbsp;이제 기능이 있습니다.Html.Raw("&nbsp;")소스 코드를 작성할 수 있도록 되어 있지만, 이 경우 컴파일러 오류가 발생합니다.

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

그래서 저는 다음과 같은 진술서를 쓰게 되었는데, 이것은 덜 친절하지만 제 경우에도 효과가 있습니다.

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

참고: 흥미로운 점은 일단 곱슬머리 받침대 안에 들어가면 레이저 블록을 다시 시작해야 한다는 것입니다.

언급URL : https://stackoverflow.com/questions/4770605/how-to-use-if-statements-with-razor-and-inline-code-blocks

반응형