加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC,ActionFilters,静态类和传递数据

发布时间:2020-12-15 21:02:42 所属栏目:asp.Net 来源:网络整理
导读:我想听听您对以下情况的意见和建议: 我已经定义了一个自定义的ActionFilter,它可以完成一些工作并带来一些价值.我想在控制器动作和模型中使用该值. 现在,我可以使用TempData将此值从ActionFilter传递给任何控制器操作方法,然后将此值分配给传递给返回视图的
我想听听您对以下情况的意见和建议:

我已经定义了一个自定义的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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读