我使用这样的 session 包装器:
public interface ISessionWrapper
{
// ...
CultureInfo Culture { get; set; }
}
public class SessionWrapper: ISessionWrapper
{
private T GetFromSession<T>(string key)
{
return (T)HttpContext.Current.Session[key];
}
private void SetInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
// ...
public CultureInfo Culture
{
get { return GetFromSession<CultureInfo>("Culture"); }
set { SetInSession("Culture", value); }
}
}
我可以在我的 Controller 中使用这个接口(interface),如下所示:
private readonly ISessionWrapper sessionWrapper = new SessionWrapper();
// ...
ci = new CultureInfo(langName);
sessionWrapper.Culture = ci;
但是如何在下面的 View 中访问此包装器以替换(直接调用) session 变量?
@switch (Session["Culture"].ToString())
{
case "fr":
// ...
case "uk":
// ...
}
最佳答案
您可以使用基本 View :
public abstract class BaseViewPage : WebViewPage
{
public virtual ISessionWrapper SessionWrapper
{
get
{
return new SessionWrapper();
}
}
}
public abstract class BaseViewPage<TModel> : WebViewPage<TModel>
{
public virtual ISessionWrapper SessionWrapper
{
get
{
return new SessionWrapper();
}
}
}
您的 View 将有权访问 SessionWrapper 属性。
确保将 pageBaseType="SessionWrapper"属性添加到 web.config 中的页面标签。
关于asp.net - 使用 session 包装器代替对 session 变量的直接调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880964/