2009-08-28 7 views
3

내 ASP.NET MVC보기에서는 다음과 같이 모델에 설정된 부울 값을 기반으로하는 스프라이트를 선택합니다.내 뷰에서 부울 논리를 이동하려면 어떻게해야합니까?

<div class="sprite-icon_dog<% =(Model.HasNewDog ? "_new" : "") %>"></div> 

이것은 못생긴 기능이며 마음에 들지 않습니다.

내 목표는 Model.HasNewDogtrue 인 경우 sprite-icon_dog_new를 사용하고 Model.HasNewDog이 false 인 경우 sprite-icon_dog를 사용하는 것입니다.

더 우아하고 읽기 쉬운 방법은 무엇입니까?

답변

5

나는 HTML 도우미가 갈 길은 없을 것이라고 생각합니까? 보기에

public static string DogDiv(this HTMLHelper html, bool HasDog) 
{ 
    return "...." 
} 

:

<%=Html.DogDiv(Model.HasDog) %> 

희망 도움이

+0

나는 귀하의 답변을 좋아하고 곧 정답으로 표시 할 것입니다. 내 자신의 손해 배상으로 나는 그 질문을 너무 단순화했다. div에 더 많은 클래스가 있습니다. 그래서 답은 작동하지 않을 것입니다. 그렇지만 확장 할 수있는 좋은 아이디어와 출발점입니다. - 감사합니다! – Guy

0

그것은 추한하지만 최선의 선택이 될 수 있습니다. 논리를 html 도우미로 옮기면 이제는 디스플레이 란 무엇이고 비즈니스 로직은 무엇인지 사이의 경계를 모호하게합니다. 마크 업 또는 CSS를 변경하려면 HTML 도우미 클래스에서 코드를 변경하지 않는 한 수행 할 수있는 작업으로 제한됩니다.

내 의견으로는, 그 추함의 일부는 MVC 모델에 익숙해지고 있습니다. MVC의 핵심 중 하나는 디스플레이, 비즈니스 로직 및 데이터 모델간에 엄격한 분리를 제공하는 것입니다.하지만 도우미에서 디스플레이 로직을 추가하기 시작하면 MVC가 의도하는 바를 부정하기 시작합니다.

관련 문제