2011-04-13 2 views
0

링크의 메뉴를 보여주는 부분 (사용자 정의)이 있습니다. 그것은 내 마스터 페이지에있다. 관리자 인 경우 다른 사람과 다른 메뉴가 표시되어야합니다.항목을 조건부로 표시하는 MVC

회원 클래스에 IsAdmin() 메서드가 있습니다.

<% if (member.IsAdmin()) { %> 

하지만 의존성 주입해서 Ninject을 사용하고 내 회원 클래스는 할 수 없기 때문에 : 누군가는 관리자가 같은 경우 우측 메뉴를 표시하는 선언적 부분에 약간의 논리를 넣어 일반적으로 매우 쉬울 것이다 필요한 종속성 (IMemberRepository)없이 인스턴스화 할 수 있습니다. 내 부분에서이 작업을 수행하는 방법을 잘 모르겠습니다. Ninject가 컨트롤러 클래스의 생성자에 저장소를 제공 할 수 있다는 것을 알고 있지만 부분적으로이 작업을 수행 할 방법을 모르겠습니다.

답변

0
나는이 같은 처지에 있었다

지난 주 '최고의 위치'에서 다양한 견해로

(mvc3으로) 동적을 ViewData 속성으로 볼에 전달 후, 상기 제어기는 그것이 필요로하는 데이터가있는 부분을 제공하기 위해 필요한 서비스 또는 저장소 주입되었는지 확인

 public class LocationController : Controller 
    { 
     private readonly ILocationService _svc; 

     public LocationController(LocationService svc) 
     { 
       _svc = svc; 
     } 

     public ActionResult Index() 
     { 
      //get data for 'top locations' partial 
      var topOnes = svc.GetTopLocations(10); 
      ViewData.TopLocations = topOnes; 
      //mvc2 would be ViewData["TopLocations"] = topOnes; 

      //get 'main' view data 
      var location = svc.GetDefaultLocation(); 
      return View(location); 
     } 

또는 공식적으로 제어기가 반환하는보기 모델에 포함 시키십시오.

+0

이 부분은 내 마스터 페이지에 존재한다는 점을 제외하면 작동합니다. 그러나 나는 언급하지 않았다. 그래서 나는 당신에게 점수를 줄 것이다. 하지만 부분적으로 마스터 페이지에 있다면 (어떻게하면 내 솔루션과 다를지 모르겠다.) 어떻게 할 것인지 생각해 보시라. – Joe

+0

만약 부분이 내 마스터 페이지에 있다면, 내가 고려해야 할 첫 번째 일은 다른 곳에서 (예를 들어, 다른 마스터 페이지 나 마스터 페이지를 사용하지 않는 페이지와 같이) 실제로 사용될 것인지 아닌지입니다 - 대답이 '아니오'라면 그 내용을 마스터 페이지로 옮깁니다. 마스터 페이지에 여기에 설명 된 데이터를 제공하는 방법에 대한 몇 가지 접근법이 있습니다 ... http://stackoverflow.com/questions/78548/passing-data-to-master-page-in-asp-net -mvc – Baldy

0

내가 그것을 알아 냈 :

당신이 정말로 MVC3 샘플 응용 프로그램의 예를 들어이보기 주입을 수행 할 경우

. 내 부분에서 나는 넣어에서 다음

IKernel kernel = new StandardKernel(new NinjectControllerFactory.MyServices()); 
MembershipService membershipService = new MembershipService(kernel.Get<IMemberRepository>()); 

그리고 지금은 다음을 수행 할 수 난의 목록을 제공하는 부분을 가지고,

if (Request.IsAuthenticated && membershipService.IsAdmin()) 
{ 
+2

이것은 좋은 해결책이 아닙니다. 그냥 아주 못생긴 해킹과 Ninject를 사용하지 않는 좋은 예입니다. –

+1

@Remo Gloor "못생긴 해킹"을 사용하지 않고 어떻게하는지 알려주면 유용 할 것입니다. – Joe

+0

나는 그것을하는 방법을 말하는 오래 전에 대답을 올렸다. Baldy와 정확히 같은 대답입니다. 뷰에 의존성 주입을 사용하지 마십시오. 컨트롤러가 뷰 모델을 변경하여 결정을 내릴 수 있습니다. –