Razor는 닫히지 않은 HTML 태그를 이해하지 못합니다.


99

RazorViewEngine을 사용하면 다음과 같이 할 수 있습니다.

if (somecondition) {
     <div> some stuff </div>
}

그러나 나는 이것을 할 수없는 것 같다 (Razor는 혼란스러워진다) :

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

여는 HTML 태그와 닫는 HTML 태그를 다른 코드 블록에 넣어야하는 상황이 있습니다. Razor에서 어떻게 할 수 있습니까?

답변:


161

다음과 같이 시도하십시오.

if (somecondition) {
    @:<div>
}

1
또는 <text><div></text>- haacked.com/archive/2011/01/06/...
Simon_Weaver

17
<text><div></text>작동하지만 작동 <text></div></text>하지 않습니다.
friggle

@Stuntman이 작동하려면 여는 태그와 닫는 태그 모두에 대해이 작업을 수행해야합니다.
Departamento B

여러 줄 텍스트를 처리하는 방법은 무엇입니까?
Dmitri Tsoy 2016

나는 이것을 인라인으로 할 수 없었다. if (조건) {@ : tag}. 위와 같이 포맷해야했습니다.
Mike

59

Darin의 대답을 설명하려면 다음과 같이 HTML 접두사를 붙입니다.

@:<html>

@ : Razor에서는 '무언가를 일반 텍스트로 렌더링'을 의미합니다.

또는 이것을 사용할 수 있습니다. 이것은 원래 작성한대로 HTML을 출력합니다 (HTML을 출력하려는 ​​경우 Razor가 수행하는 자동 HTML 인코딩을 방지하는 데 사용할 수도 있습니다).

@Html.Raw("<html>")

(MS의 Html.Raw 참조-http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111 ) .aspx )


2
솔루션은 훌륭하지만 설명은 매우 중요합니다. 감사!
jay

2
첫 번째 여러 줄에 분할 포맷 자동차를 사용하여 (Ctrl + K CTRL + D) 이었기 때문에 나는 @ Html.Raw ( "<HTML>") 솔루션을 선호
마테오 Sganzetta

@MatteoSganzetta 출력하는 내용에 Razor 변수가 뿌려진 경우가 아니면 True입니다. 예 :@:<a href="@link" class="@classNames">@text</a>
qJake

사용주의 @Html.Raw()- 관련 SO 게시물 참조
SliverNinja-MSFT

4

사용자 지정 MVC 도우미 메서드를 만들 수 있습니다. 당신과 함께 네임 스페이스에 공용 정적 클래스 MyRenderHelpers를 만들고 System.Web.Mvc.HtmlHtml 메서드를 작성합니다.

namespace System.Web.Mvc.Html
{
    public static class MyRenderHelpers
    {
        public static MvcHtmlString Html(this HtmlHelper helper, string html, bool condition)
        {
            if (condition)
                return MvcHtmlString.Create(html);
            else
                return MvcHtmlString.Empty;
        }
    }
}

이제 면도기보기에서이 확장 메서드를 사용할 수 있습니다.

@Html.Html("<div>", somecondition)

3

이 작업을 수행해야한다는 사실은 일반적으로 뷰 코드가 올바르게 팩터링되지 않았 음을 나타냅니다. HTML의 특성은 균형 잡힌 태그 또는 자체 폐쇄 형 태그 (적어도 HTML 4에서는 HTML 5에서 멀어지는 것처럼 보임)를 갖는 것이며 Razor는 그 가정에 의존합니다. 조건부로 a <div>를 출력하면 나중에 출력 할 수도 있습니다 </div>. if진술에 whoel 쌍을 넣으십시오 .

@if(something) {
    <div>
        Other stuff
    </div>
}

그렇지 않으면 여기 와 같은 이상한 코드로 끝납니다 .


6
내 상황은 내가 원하는 것입니다
sydneyos 2011 년

맞아요, 제 요점은 99 %의 경우에는 안된다는 것입니다. 하지만 1 %에 해당 할 수 있습니다.이 경우 @:또는<text></text>
2011 년

7
그는 아마 나중에 닫는 블록을 가지고 :if (somecondition) { @:</div> }
Simon_Weaver

네, 그래야합니다. 내 요점은 이러한 이중 조건이 필요하지 않도록 이러한 뷰를 리팩토링 할 수 있다는 것입니다.
2011 년

1
@michielvoo 예를 들어 조건부 div 래퍼를 사용하기 위해이 메서드를 사용하는 것이 왜 나쁜가요? 또한 HTML5에서는 <link>태그를 닫지 않습니다 .
Chris Haines
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.