【问题标题】:Make a Global ViewBag制作一个全局 ViewBag
【发布时间】:2014-04-30 06:40:55
【问题描述】:

有没有办法创建一个可以在不同视图中使用的全局 ViewBag

在我的应用程序场景中, 1)我使用了一个 DropDown for Company 用于_Layout.cshtml 页面。

2) 对于该下拉菜单,我通过在每个操作中创建 ViewBag.Company 来传递值。

我想要解决方案::

1) 一个全局 ViewBag.Company,其中包含我们从每个操作中传递的 List。

2) 这样就不需要在每个 Action 中创建 ViewBag.Company。

这个问题可能有所不同。 但是我们如何才能做到这一点呢?

【问题讨论】:

  • 那你为什么要放在 ViewBag 里呢?可以从您的视图中调用任何公共静态方法。基本上,任何具有静态字段的类都可以用作 ViewBag(假设您知道数据类型,我假设您知道)
  • 因为助手访问 viewbag,而静态属性是个坏主意
  • Rahul - 如何将布局页面中的值传递给操作?您是否在使用帖子(然后您将看不到视图)。你能澄清一下吗?您是否有在每个操作中设置 View.Company 的工作代码?

标签: asp.net-mvc asp.net-mvc-3 session viewbag


【解决方案1】:

在现实世界中,您的架构存在错误。

public class CustomNameAttribute : ActionFilterAttribute
{
        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
            filterContext.Controller.ViewBag.Company = "Company";
        }
}

我认为您需要使用授权并使用属性用户

【讨论】:

    【解决方案2】:

    添加一个将公司添加到视图包的全局过滤器。

    基本上是创建一个actionfilter:

    public class CompanyFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.Controller.ViewBag.Company = "MyCompany";
        }
    }
    

    并全局注册

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new CompanyFilter()); // Add this line
            filters.Add(new HandleErrorAttribute());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 2021-04-03
      • 2017-09-19
      相关资源
      最近更新 更多