2012-03-14 2 views
0

더 나은 방법이 있습니까 @if @else 면도기 뷰로 빌드 된 cshtml 페이지에서 html 요소의 속성을 일부만 변경 (예 : 비활성화, 값, 클래스 등)합니까?MVC3 면도기 최적화보기

+0

글쎄, "if/else"를 피하는 법을 모르겠습니다. 어쩌면 짧은 if/else 구문이 @ (true? "enabled": "disabled")에 도움이 될 수 있습니다. 다른 방법으로 도우미를 만들거나 컨트롤러에서 속성 값을 계산할 수 있습니다. –

답변

0

MVC 4/면도기 V2에는 몇 가지 개선 사항이 있습니다 :

조건부 특성 렌더링 과거에이 같은 빈 속성을 작성 피하기 위해 NULL 체크를 할 필요했습니다 null이 될 수 속성이있는 경우

:

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

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

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

그래서, 출력은 바로 이것이다 :

<div>Content</div> 

Jon Galloway's blog에서.

+0

놀라운 feature..like 그것 :) – Aman

0

난 당신이 면도칼 @if 어떤 성능 결함이 있다고 생각 이유를 알고하지 않습니다하지만 당신은 이것에 대한 귀하의 ViewModel 또는 ViewBag을 사용할 수 있습니다 : 서버 측 논리를 혼합하지 마십시오,

<input type="text" value="@(ViewBag.TheValue)" /> 

그러나 가장 좋은 방법에 대해 프레 젠 테이션.


업데이트 (I "는 우려의 분리"뜻 했는가) "우려의 분리"

을이보기는해야, HTML 마크 업이 할 수있는만큼이 포함되어 의미 및 HTML 도우미 (마크 업 작성에 도움이되는) 만 제공합니다. 뷰 내부에 로직을 넣지 마십시오. 동일한보기가 코드를 내부에 넣으면 다시 사용하지 마십시오.

+0

코드를 정리하고 싶습니다.나는 요소의 'ID'에서도 충돌을 일으킨 else 문을 여러 개 사용하고 중첩해야합니다. – Aman

+1

@ user1270199. ** ** 실제 ** 코드를 보여주십시오. 면도기를 잘못 사용하고있는 것 같습니다! – gdoron

+0

"서버 측 로직과 프리젠 테이션을 섞지 마십시오."라는 말은 모든 동적 속성에 Viewbag.Value를 사용한다는 의미입니까? – Aman

0

ViewModel에서 true/false 값 또는 문자열 값으로 전달할 수 있습니다. 동적으로 활성화 또는 비활성화되도록 설정 될 필요가

  • 아무것도 - - 예를 들어 당신이 부울
  • 런타임에 설정 문자열입니다 모든 HTML 클래스를 만들 수는 문자열 변수로 전달 될 수있다 당신의 뷰 모델.

등 다른 문

+0

html은 재미있는 html.helpers처럼 들릴 수 있습니다 (나는 보았습니다.) Aman

+0

이 목적을 위해 html 헬퍼를 어떻게 사용할 계획인지 잘 모르겠다. – MoXplod

+0

MvcHtmlString StatusClass를 사용하여 조건에 따라 perticular 클래스를 선택하는 것과 같다. MvcHtmlString 확장 메서드에서 유용하지 않다. ( – Aman

2

당신은뿐만 아니라 인라인 조건문을 사용할 수있는 모든 @if 당신의 면도기 전망을 정리할 것

:

<input type="text" value="@(true == true ? "one value" : "another value")" /> 
관련 문제