[asp.net-mvc-3] Razor는 닫히지 않은 HTML 태그를 이해하지 못합니다.

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

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

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

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

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



답변

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

if (somecondition) {
    @:<div>
}


답변

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 )


답변

사용자 지정 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)


답변

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

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

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


답변