2012-11-07 3 views
4

태그에서 스타일 속성을 조건부로 출력하고 싶습니다. 예 : <li style="@styleVar" >...</li> styleVar이 null 인 경우 면도기 (면도기 2의 기본 기능 만)로 작성하면 안되지만 일부 이상한 경우 이유는 <li style="">...</li>으로 출력되고, <li>...</li> 일 것입니다.면도기 조건부 특성이 작동하지 않음

부분보기입니다. 정상적인보기에서 작동 중입니다. 부분보기의 버그입니까?

아무도 같은 경험입니까?

+0

"면도기 조건 속성이 작동하지 않습니다"에 대한 도움말을 찾고있는 사람들을 위해 확실히 가능성이다, MVC4로 업그레이드 할 수 있다면이 동작은 무료입니다. http://www.beletsky.net/2012/04/new-in-aspnet-mvc4-razor-changes.html –

+0

MVC4를 사용하고 있습니다. 내가 MVC4에 포함되어있는 Razor 2를 사용한다고 말했습니다. – Jaap

+2

면도날은 공백에 대해 다소 까다 롭고, 속성 이름과 '='사이의 공백을 제거한 것처럼 보입니다. – Fionn

답변

1

코드에 오류가 표시되지 않습니다. 마크 업을 "하드 코딩"하고 스타일 값만 다릅니다. 은 당신이 뭘 하려는지 달성하기 위해, 당신이 유사한 코드를 필요

@if(!string.IsNullOrEmpty(styleVar)) 
{ 
    <li style="@styleVar" >...</li> 
} 
+0

  • ...
  • 을 출력으로 기대합니다. 그것을 명확히하기 위해 내 질문을 편집했습니다. – Jaap

    +0

    변경 사항에 따릅니다. string이 NULL로 평가되면 빈 속성을 제거하지만 문자열이 빈 문자열로 평가되면 빈 속성을 렌더링합니다. 이것은 Razor v2 – Dima

    +0

    의 알고리즘입니다. 최상위 레벨보기에는 해당 작업이 있지만 부분보기에서는 작동하지 않는 것 같습니다. – Jaap

    -1

    때 당신은 부분적이고 정상적인보기에 (적어도 mvc3로) <li style="">...를 얻을 것이다 styleVar == null. styleVar이 자동으로 수행됩니다 null (안 string.Empty) mvc4 같은 경우

    <li @(styleVar == null ? "" : "style=\"" + styleVar + "\"")>...</li> 
    
    +0

    저는 MVC4에서 사용되는 제 질문에서 말했듯이 면도기 2로 작업하고 있습니다. 그래서이 대답은 적용되지 않습니다 – Jaap

    5

    :

    난 당신이 조건 연산자를 사용해야 할 것 같아요.

    렌더링 조건부 속성

    당신은 과거에이 같은 빈 속성을 작성 피하기 위해 NULL 체크를 할 필요했습니다 null이 될 수 속성이있는 경우 :

    <div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div> 
    

    이제 Razor가 자동으로 처리 할 수 ​​있으므로 속성을 쓸 수 있습니다. 이 널 (null)의 경우, 속성은 기록되지 않습니다 :

    <div>Content</div> 
    
    +1

    이것은 Html.Helpers에도 적용 가능합니까? – Meryovi

    +0

    속성의 값이 null 인 경우 속성이 렌더링되지 않음 –

    7

    이 부분 뷰에서 사용자 정의를 위해 작동하지 않는 것 : 그래서 @myClass가 null의 경우

    <div class="@myClass">Content</div> 
    

    는 출력이 바로 이것이다 html 속성 (예 : data-test = "@ test"). 이것은 생략하지 않고 대신 여전히 data-test = ""에 넣습니다. 그래서 MVC 팀은이 문제를 즉시 해결해야합니다.

    +0

    'data' 속성이 제거되지 않으면 고의적이라고 확신합니다. –

    +4

    "data-"조건부 속성을 사용할 수 없습니다. 소스에서이 참조를 찾을 수 있습니다. 코드 // 먼저 조건부 속성을 사용할 수 없으므로 이것이 '데이터'속성인지 확인하십시오. LocationTagged name = nameSymbols.GetContent (Span.Start); bool attributeCanBeConditional =! name.Value.StartsWith ("data-", StringComparison.OrdinalIgnoreCase); – Vincent

    0

    또 다른 가능한 원인은 HTML 태그 내의 Razor 주석입니다. 내 조건 속성 졌 있었다 갑자기 하나의 테스트 목적에 대한 속성과 모든 주석했을 때

    // This renders <div>Hello world</div> 
    <div class="@null">Hello world</div> 
    
    // Renders <div class="">Hello world</div> 
    <div @**@ class="@null">Hello world</div> 
    

    나는이에 달렸다.

    0

    난 그냥 속성 이름 사이에 공백 및 등호 파산 부울 조건 렌더링에 서명 상황이 있었다 :

    을 그래서

    <input type="checkbox" name="fieldname" id ="fieldname" checked="@Model.MyBool" />

    <input type="checkbox" name="fieldname" id="fieldname" checked="@Model.MyBool" /> 반면, checked="True" 렌더링

    로 올바르게 렌더링

    조건부 렌더링이 상당히 부서지기 쉽습니다.

    이 정확히 OP의 질문의 세부 사항에 대한 답변은 아니지만, 당신이 여기 MVC3를 사용하는 가정

    관련 문제