持久化数据

Persisting Data

我正在构建一个 MVC 4 Intranet 站点,我希望在页脚中包含持久数据。我将保留一些每个用户独有的基本统计数据。我希望这些数据在用户访问该站点期间在所有页面中持续存在。

保存这些数据的最好方法是什么?一块饼干?这只是将从 AD 中提取的一些非敏感信息。我在考虑隐藏字段,但这似乎有点麻烦。

感谢您的见解!

虽然您可以使用会话来完成这项任务,但我要提醒您不要这样做。应尽可能避免会话。

您可以使用子操作构建页脚,使用 AD 获取相关详细信息,然后在您的布局中呈现它。如果您担心每次呈现页脚的请求都会触发 AD,那么只需缓存结果即可。

public class FooController : Controller
{
    ...

    [ChildActionOnly]
    public ActionResult Footer()
    {
        // query AD and stuff the info in a view model
        return PartialView("_Footer", model);
    }
}

然后,在您的布局中:

@Html.Action("Footer", "Foo")

当然,您需要将当前的页脚视图代码移动到局部视图中,根据此示例命名为 _Footer.cshtml

要缓存,只需在子操作前面加上:

[OutputCache(Duration = 3600, VaryByCustom = "User")]

Duration 以秒为单位,所以上面的内容会缓存一个小时。您需要在 Global.asax 中添加以下方法:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "User")
    {
        if (context.Request.IsAuthenticated)
        {
            return context.User.Identity.Name;
        }
        return null;
    }

    return base.GetVaryByCustomString(context, custom);
}