2012-02-29 3 views
3

나는 내 견해로 가져온 거에요 분야의 많은 제어 로직 인 것을 눈치 챘 :MVC3 모델 데이터는 분리

@if (Model.IsAdmin) { 
    <p>You're an admin</p> 
} 

MVC가 작동하는 방법의 나의 이해는 무엇이 들어가는 것입니다 모델은 훨씬 더 많은 데이터처럼 작동해야합니다. 양식 일 경우 반환됩니다. 사용자가 보거나 변경할 수 있습니다.

뷰 로직에 제어 로직을 적용하고 있습니까? 제어 논리를 MVC의 뷰에 전달하는 규칙은 무엇입니까?

답변

4

보기 좋지 않은 관행에 제어 논리를 넣고 있습니까?

아니요, 일부 논리 섹션을 조건부로 표시하거나 숨기려면보기 내부에서 논리를 완벽하게 미세하게 처리 할 수 ​​있습니다. 당신의 특별한 예는보기에 완벽합니다.

+1

+1 조건부로보기를 사용하면 일부 섹션을 표시하거나 숨길 수 있습니다. – jgauffin

1

뷰에 제어 논리가 많은 경우 컨트롤러의 제어 논리를 처리 한 다음 다른 역할에 대해 다른 뷰를 제공하는 것이 좋습니다.

컨트롤러 로직

if(IsAdmin) 
    return View('AdminPage') 
else 
    return View('UserPage') 

생각은 그들에게 주어진 데이터를 표시하고, 논리가 배경 (컨트롤러)로 분리시키는에 초점을 맞추고 귀하의 의견을 유지하는 것입니다.

그러나 몇 군데에서만 이런 일이 발생하면 아마도 그렇게 나쁘지 않을 것입니다. 전체 코드를 보지 않고는 흑백으로 완벽하게 구분되는 것이 없으므로 확실하게 말할 수는 없습니다.

특정 예는 나에게 잘 보인다
+0

을이 청소기를 만들기 위해 HTML 헬퍼를 생성? 그것은보기의 논리를 지키기 위해 온통 전망을 속이지 않기 위해 매우 건조한 것 같지 않습니다. –

+0

그게 바로 제가하려는 것입니다. 차이가 작 으면 나쁜 것은 아닙니다 (다른 사람들이 제안한 것처럼). 그러나 컨트롤 논리로 인해 뷰의 절반이 변경되면 다른 뷰를 만드는 것이 좋습니다. 또한 변경되는 내용 만있는 경우 컨트롤러에서 업데이트 된 모델을 만들 수 있습니다 (Stephen이 제안했듯이). 하지만, 여기저기서 작은 물건이라면 그대로 두어야합니다.이것은 대답이 반드시 흑백 일 필요는 없다는 점에 이릅니다 –

1

있습니다 (보기 도메인) 데이터합니다 (모델 도메인)을 제시하고, 무엇을 당신이 얻을 것은 당신이받는 데이터를 기반으로합니다.

일반적으로 1-2 가지 조건 인 @if보다 복잡하다면 더 전문화 된보기를 다른 특수보기로 분할하거나 특수 부분보기를 사용하는 것이 좋습니다. 그러나 실제로는 MVC 프로젝트의 흐름 제어 (ASP.NET 구현이 아님).

+0

엄지 손가락의 아주 좋은 규칙 - 저는 이것을 채택 할 것입니다. –

1

원하는 경우 컨트롤러에 추가 할 수 있습니다.

if(user.IsAdmin) 
    ViewBag.WelcomeMessage = "You are an admin"; 
else 
    ViewBag.WelcomeMessage = "You are a user"; 
0

속성을 설정하는 대신 권한 부여에 역할을 사용해야합니다. 그런 식으로. 이런 식으로 뭔가 :

@if(User.IsInRole("Admin")) { 
    <p>You're an Admin!</p> 
} 

의 차이가 작은 경우에도 당신이 좋아하는 경우에, 당신은 Razor helper에이를 캡슐화 할 수 또는 (당신이 많은 장소에서 사용하는 경우)