2017-10-04 81 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

同意,更好地使用结果过滤器。谢谢 –