2011-01-06 3 views
22

내보기 내 사용자 역할에 따라 숨기고 표시하려는 일부 관리 링크가 있습니다 (예 :보기 내부에서 어떻게 할 수 있습니까?보기 내에서 ASP.NET MVC 역할 확인

<%= if(CHECK IF USER ROLE ADMIN) { %> 
     <div class="tools"> 
      <ul> 
       <li class="edit"><%= Html.ActionLink("Edit", "Edit", new { id = Model.storyId }) %></li> 
       <li class="delete"><%= Html.ActionLink("Delete", "Delete", new { id = Model.storyId }) %></li> 
      </ul> 
     </div> 
<%= } %> 
+7

당신은 당신의 행동이 검사를 수행하고을 ViewData 해시로 또는 같은 값을 넣어 할 수 있습니다 귀하의보기를 바보로 유지하는 귀하의 viewmodel 속성. – R0MANARMY

+0

간단한 if 문을 사용하여보기 내부를 확인하는 것을 선호합니다. 이전에 해봤지만 코드를 기억할 수는 없습니다. – Cameron

+1

이전에 해보 셨기 때문에 좋은 생각이 아닙니다. 당신이보기에 넣은 코드는 (쉽게 알 수 있듯이) 테스트를하거나 리팩토링 할 수 없다는 것을 기억하십시오. 롭 코너리 (Rob Connery)는 [태그 수프 피하기] (http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/)에서 한동안 훌륭한 글을 올렸습니다. – R0MANARMY

답변

22
<% if (Page.User.IsInRole("Admin")){ %> 

<%}%> 

그러나이 내 의견에 끔찍한 생각이다. ViewData 또는 Model이 뷰의 표시 대상을 나타내도록하는 것이 좋으며 뷰는 뷰 데이터를 간단히 확인할 수 있습니다. 컨트롤러 기본 클래스 또는 액션 필터는이 코드를 반복적으로 사용하여 한 곳에서 코드를 사용할 수있게합니다.

+0

저는 보통 ViewModel을 사용하여 컨트롤러에서 이러한 종류의 정보를 보냅니다. 그러나, 나는 역할을 기반으로 내 _Layout.cshtml에서 특정 것들을 표시하려고합니다. 단지 "끔찍한"아이디어는 무엇이며, 그 이유는 무엇입니까? 강력하게 형식화 된 부분 뷰를 작성하여 콘텐츠를 표시하고 숨기는 클래스를 여기에 추가하거나이 _Layout의 도우미 메소드를 선택하여 사용하는 것이 가치가 있습니까? 나는 사물이 "끔찍한 생각"이라는 일반화 된 주장에 대해 불안해합니다. – Methodician

+0

보기 모델을 사용하여 컨트롤러의 모든 역할 논리 (또는 컨트롤러가 사용하는 클래스)를 표시하고 정의하고 뷰 모델을 적절하게 할당 할 수 있습니다. 직접 확인하는 것은 계속 작동하지만 더 큰 프로젝트에서는 관리하기가 어려우며 다루기가 더 쉽지 않습니다. – CRice

+0

귀하의 상황에 따라 전화를 걸 수 있습니다. – CRice

0

대부분의 사람들은이 데이터가 컨트롤러 나 다른 비즈니스 서비스에 의해 "미리 결정된"형태로 제공되어야한다는 것에 동의합니다. 반면에 View는 가능한 한 많이 HTML 마크 업과 언어 제어 구조를 사용합니다. 등 등 JQuery와, CSS, 다른 일반적인 웹 페이지 건물 케이크를 사용하여 "페이지를 구체화"

+1

당신의 진술을 이해하지 못했습니다. –

38
@if (this.User.IsInRole("Administrator")) 
{ 

} 
+2

이것은 허용 된 대답이어야합니다. –

+1

이것을 사용하십시오. 문제를 해결했다. – PAVITRA

관련 문제