所以我有一个在第一次用户登录时设置的Session变量
Session["ClientID"]
基本上这用于主题(因此ClientID将主题/品牌设置为显示在网站上)。查看应用代码
(Guid)Session["ClientID"]
到处都是肮脏且容易出错,用于获取全局识别变量的最佳设计模式。所以我可以做到
this.CurrentClientID
所有MVC页面上的或类似内容。从理论上讲,我可以使用提供此ID的Custom类重载Controller
类,但我不确定如何将其公开给View。
任何指向最佳解决方案的指针都会感激不尽!
答案 0 :(得分:2)
不知道你的意思是全局,但是ControllerBase
类的扩展方法会使它在所有控制器中都可访问:
public static class ControllerExtensions
{
public static Guid GetCurrentClientID(this ControllerBase controller)
{
return (Guid)controller.ControllerContext.HttpContext.Session["ClientID"];
}
}
现在在每个控制器中都可以访问它:
public ActionResult Foo()
{
Guid id = this.GetCurrentClientID();
...
}
如果您希望它更全局可用,请将其作为HttpContextBase类的扩展方法:
public static class ControllerExtensions
{
public static Guid GetCurrentClientID(this HttpContextBase context)
{
return (Guid)context.Session["ClientID"];
}
}
现在,无论您在何处访问HttpContext(几乎无处不在ASP.NET应用程序中),您只需使用扩展方法即可。例如,在视图中:
@Html.ActionLink("foo link", "foo", new { clientid = Context.GetCurrentClientID() })