【问题标题】:Pass data to the view. Always through viewData ?将数据传递给视图。总是通过 viewData ?
【发布时间】:2012-05-23 23:03:45
【问题描述】:

我正在构建一个监控其他系统的应用程序。现在我想实现局部视图,一个叫做“状态”的用户控件。此控件应显示有关应用程序的状态信息。如:

用户登录,

有多少系统在线,

最近的活动。

该局部视图应在几乎所有其他视图中呈现。我该如何将这些信息传递给视图?

我不想写

Wiewdata[“SystemsOnline”] = Helpers.CountSystemsOnline() 
Wiewdata[“SystemLatestActivity”] = ………………

在我所有的行动中。

我可以编写类似 Html.RenderPartial(../Shared/Status) 之类的内容来执行添加视图数据的操作吗?

或者我应该通过 hepler 直接访问视图中的信息吗?

我注意到默认的 LogOnUserControl 视图使用 Page.User.Identity.Name 直接访问该数据。

什么时候可以不通过控制器中的视图数据传递数据?

【问题讨论】:

    标签: asp.net-mvc model-view-controller


    【解决方案1】:

    为此,您必须使用 ViewData 类。我不建议发明技巧

    但您不需要手动每个操作传递相同的数据。只需在您的基本控制器中执行此操作:

    protected override void OnActionExecuted(ActionExecutedContext context) {
        base.OnActionExecuted(context);
        if (context.Result is ViewResult) {
            // Pass the systems online to all views
            ViewData[“SystemsOnline”] = Helpers.CountSystemsOnline();
        }
    }
    

    只需几行代码,您就可以让它随处可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多