2013-04-02 3 views
2

간단한 문제로이 문제를 단순화했습니다. 내 페이지에 아무 것도 출력되지 않는 이유는 무엇입니까?Mvc raw에는 출력이 없습니다

@if(true){Html.Raw("<a>test</a>");} 

편집

이 수행하지만 일 :

@if (true) { <span>@Html.Raw("<a>test</a>")</span>} 
+0

대신 MvcHtmlString.Create()를 사용해보세요.하지만 이것에 대해서도 회의적입니다. 일반적으로 @@ 분기 내에서 렌더링 된 코드 주위에 태그를 사용합니다. 왜 당신에게 단호한 이유를 줄 수는 없지만 이것은 표준적인 행동입니다. –

답변

3

내가 나 처음에 "어떻게 처리" "그것을 할 필요가있는 경우"면도기 엔진이 혼동되기 때문에 그것의 생각 당신이 쓴 코드의 타입. Html 구문의 시작 부분에

@if(true){@Html.Raw("<a>test</a>");} 

을 주목 @ :이 작업을 수행하는 경우 그 작동합니다. 그것에 대해 an explanation here by Scott Guthrie가 있습니다.

이 모든 내용 컨테이너 블록하지만, 가와 면도기 파서가 암시 적으로 콘텐츠 블록을 감지 할 수없는 시나리오가, 태그 요소 태그로 시작 : 그것의 요약이 있습니다.

면도기는 코드 블록 내에 @ : 문자 시퀀스 을 사용하여 콘텐츠 라인의 시작을 명시 적으로 나타낼 수있게하여이 문제를 해결합니다. @ : 시퀀스는 뒤 따르는 콘텐츠의 줄을 콘텐츠 블록으로 처리해야 함을 나타냅니다.

이제 귀하의 특정 문제에 해당한다고 생각합니다. 면도기 파서는 열고 닫는 문자 나 HTML 요소를 읽어 종료 코드를 추론하기 때문에

+0

설명해 주셔서 감사합니다. – John

+0

당신은 환영합니다 –

1
@if(true){Html.Raw("<a>test</a>");} 

위 라인은 당신에게 HTML 출력을 제공하지 않습니다. 코드에는 if 조건 안에 html 요소가 포함되어 있지 않으므로 구문 분석기는 컨트롤러에서와 같이이 표현을 eveluate합니다. @Html.Raw 스팬 요소 아래에 포장되어 있기 때문에

@if (true) { <span>@Html.Raw("<a>test</a>")</span>} 

이 작동합니다.

+0

왜 이런 일이 일어날 지 궁금해서 고맙습니다 von v.는 위의 좋은 설명을했습니다. – John

관련 문제