将数据传递给视图。总是通过viewData?

时间:2009-08-24 09:15:49

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

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

用户已登录,

在线有多少个系统,

最新活动。

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

我不想写

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

在我的所有行动中。

我可以写一些像Html.RenderPartial(../ Shared / Status)这样的东西,它会添加到添加viewdata的动作吗?

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

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

何时可以通过控制器中的viewdata传递数据?

1 个答案:

答案 0 :(得分:2)

为此,您必须使用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();
    }
}

只有几行代码才能让它随处可用。