asp.net - 使用 session 包装器代替对 session 变量的直接调用

标签 asp.net asp.net-mvc-3

我使用这样的 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/

相关文章:

jquery - 无法获取ajax返回并显示它

asp.net-mvc-3 - ASPX ASP MVC @model 的语法

asp.net - 为 ViewModel 创建 View 帖子返回具有空外键属性的 ViewModel

c# - Linq 查询连接不起作用

Asp.Net Masterpage - 居中全高 Div 问题

c# - 模型从 ASP.NET Web API 中的 URI 绑定(bind)到字典

ASP.net:[A]ASP.loggedin_master 无法转换为 [B]ASP.loggedin_master。类型 A 源自 'App_Web

c# - MVC Razor View /布局的执行顺序是什么

asp.net-mvc-3 - 如何使用 DisplayName 属性和/或 LabelFor 在表单标签中呈现 HTML 链接?

c# - 在我的 asp.net MVC 中返回仅包含 java 脚本警报的局部 View 是一个糟糕的设计吗