2017-10-04 105 views
2

如何將過濾器模型從.Net核心傳遞到視圖? (我不想重定向)用動作過濾器查看模型

我的行爲過濾:

private class CustomFilter : IActionFilter 
{ 
    private readonly MainDbContext _mainDbContext; 

    public CustomFilter(MainDbContext mainDbContext) 
    { 
     _mainDbContext = mainDbContext; 
    } 

    public void OnActionExecuting(ActionExecutingContext context) 
    { 
     var model = _mainDbContext.Groups.ToList(); 
     context.Result = new ViewResult { ViewName = "Index" }; 
    } 

    public void OnActionExecuted(ActionExecutedContext context) 
    { 
    } 
} 
+0

通常,如果我不想重定向但想操縱或過濾一些數據 - 我使用[web api](https://www.asp.net/web-api)控制器。沒有重定向 - 只是一個Ajax調用 –

+0

@MichaelHancock上面的示例動作過濾器僅用於簡單顯示問題,但我的真實動作過濾器有更多的邏輯並用於許多動作和控制器 –

回答

3

下面應該工作:

public void OnActionExecuting(ActionExecutedContext context) 
    { 
     var model = _mainDbContext.Groups.ToList(); 

     var result = context.Result as ViewResult; 
     if (result != null) 
     { 
      context.Result = new ViewResult { ViewName = "Index", ViewData = new ViewDataDictionary(result.ViewData) 
      { 
       Model = model 
      }}; 
     } 
    } 

而且,考慮使用的Result filter,而不是行動的過濾器。

結果過濾器僅針對成功的結果執行 - 當操作或操作過濾器生成操作結果時。當異常過濾器處理異常時,不執行結果過濾器。

+0

同意,更好地使用結果過濾器。謝謝 –