2011-07-17 6 views
5

나는 몇 가지 질문을 조사했지만 이에 대한 답을 찾지 못했습니다. 누가 아는 지, 아마도 나는 최고의 연습을 깨고있다. 단순히 속성을 지정하여 레이아웃을 설정할 수있는 레이아웃 인젝터 속성에 대한 훌륭한 답을 읽은 후에도 사용자를 인증해야하는 컨트롤러를 속성으로 지정할 때이 종류의 클래스를 사용할 수 있다고 생각했습니다. 보기를 처리 할 때 모델이 null 사실을 제외하고,OnActionExecuting에서 명시 적으로 설정할 때 ViewModel이 null입니다.

// class AdminAttribute 
public class AdminAttribute : LayoutInjectorAttribute 
{ 
    // ctor 
    public AdminAttribute() 
     : base("_LayoutAdmin") 
    { 
    } // eo ctor 


    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     WebUser user = WebApplication.CurrentUser; 
     if (!user.IsAuthenticated) 
     { 
      filterContext.Result = new ViewResult() { ViewName = "Unauthorised" }; 
      filterContext.Controller.ViewData.Model = new ViewModel(WebApplication.CurrentUser.Translate("msgunauthorisedtitle")); 
      filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext); 
      return; 
     } 
     base.OnActionExecuting(filterContext); 
    } // eo OnActionExecuting 

} // eo class AdminAttribute 

모든 작품 :

그래서, 내가 모든 곳에서 인증을 확인하는 데보다는, 나는 다음을 썼다. 왜 이런 사람이 있을지 모르는 사람이 있습니까?

뷰 페이지 (Unauthorised.cshtml) 사전에

@model Py2.Web.ViewModel 
<h2>@Model.Title</h2> 

감사합니다!

답변

3

는 다음과 같이하십시오 :

명시 적으로 ExecuteResult를 호출 할 필요가는 ASP.NET MVC의 frameowrk의 일이다,이 없다는 것을
if (!user.IsAuthenticated) 
{ 
    var result = new ViewResult { ViewName = "Unauthorised" }; 
    var model = new ViewModel(
     WebApplication.CurrentUser.Translate("msgunauthorisedtitle") 
    ); 
    result.ViewData.Model = model; 
    filterContext.Result = result; 
    return; 
} 

공지 사항, 단순히 그것을 모델 (result.ViewData.Model = model)을 전달하여 ViewResult를 반환합니다. 또한이 뷰 모델이 뷰 결과에 전달되는 방식을주의 깊게 살펴보고 코드에서 수행하는대로 filterContext.Controller.ViewData.Model으로 이동하지 마십시오.

+0

감사합니다. 그것은 치료를했습니다. 내가 뭘 잘못 했니? 다시 한번, 귀하의 조언에 감사드립니다. –

+1

@ Moo-Juice, 당신이 내 대답에 설명했듯이 몇 가지 잘못된 일을했다 : 1. 당신은 명시 적으로'filterContext.Result.ExecuteResult'을 호출했습니다. 2. 뷰 모델을 올바른 객체에 할당하지 않았습니다. (' filterContext.Controller.ViewData.Model')를 뷰 결과에 할당하는 대신에 사용합니다. –

관련 문제