我想听听您对以下情况的意见和建议:
我已经定义了一个自定义的ActionFilter,它可以完成一些工作并带来一些价值.我想在控制器动作和模型中使用该值.
现在,我可以使用TempData将此值从ActionFilter传递给任何控制器操作方法,然后将此值分配给传递给返回视图的所有模型.
我相信它会起作用,但是这个TempData会在会话中出现,当时没有人真正需要它.该值应该在单个请求期间专门用于代码,之后它会有效地使其无效.
我提出了两个选择:
>在ActionFilter中,我在OnActioExecuting()的TempData中设置了这个值,然后在OnActionExecuted()中将其删除.我是否正确理解,当调用OnActionExecuted时,控制器操作已完成,响应已经生成,并且此TempData内容尚未进入会话YET?
>在我的任何自定义静态类(逻辑)中,我只为该值定义一个公共属性,并在需要时使用它.在OnActionExecuting()和实际执行控制器方法之间,这个静态字段是否会丢失?在服务器上的请求处理期间是否还有其他问题可能会丢失此值?
还有其他/更好的选择我还没考虑过吗?
解决方法
我发现使用ActionParameters使您的代码非常容易测试.你可以这样做:
// inside your actionfilter public override void OnActionExecuting(ActionExecutinContext context) { var someData = // ... load some data context.ActionParameters["someData"] = someData; } // and then in your action method [ProvideSomeData] public ViewResult Index(SomeData someData) { // someData will be populated in here }