2009-06-08 76 views
7

我使用強類型視圖,其中所有ViewModel都繼承了BaseViewModel類。如何在使用分型視圖時在ActionFilterAttribute中設置模型數據

在裝飾所有控制器的ActionFilter中,我想使用模型。

現在,我只能訪問它像這樣:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"]; 
     base.OnActionExecuting(filterContext); 
    } 

的問題是,我必須知道密鑰「視圖模型」。最關鍵的是視圖模型,因爲在我的控制器我用:

回報 視圖(「MyView的」, 視圖模型)

是否有存取權限模型一個更安全的方式?

回答

14

OnActionExecuting在Action執行之前工作 - 因此Model被設置爲null。你可以在OnActionExecuted訪問您的ViewData(或ViewData.Model):

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var model = filterContext.Controller.ViewData.Model as YourModel; 

    ... 
} 

希望這有助於

+0

這是有道理的。我的過濾器的一部分可以訪問路由中的值,並且在Action執行之前需要知道。我在OnActionExecuting中仍然有這部分內容。剩下的就在OnActionExecuted。 – 2009-06-08 22:29:29

4

你可以用戶也該在OnActionExecuting:

BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel; 

希望這有助於

1

這是一個老問題,但現在我可以在OnActionExecuting期間訪問該模型:

var model = filterContext.ActionParameters["model"] as CustomerModel; 
相關問題