持久化数据
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);
}
我正在构建一个 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);
}