Helper类中的参考会话

时间:2012-07-31 19:01:44

标签: c#

所以我有一个方法,我从互联网“借用”我在许多页面上使用来处理网格列的排序。

        private string GetSortDirection(string column)
    {

        // By default, set the sort direction to ascending.
        string sortDirection = "ASC";

        // Retrieve the last column that was sorted.
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

现在它工作得很好,但是,我必须将它复制到我想要调用它的每个页面,因为它引用了viewstate。所以我想将它移动到我的助手类,并将其存储在会话状态中,但是,我可以在辅助类中引用它。

他们以任何方式从帮助类访问会话吗?我可以通过引用传递会话状态吗?

4 个答案:

答案 0 :(得分:3)

如果我正确理解了这个问题,那么您希望从非页面的类中访问ViewStateSession

如果是,您可以使用HttpContext.Current.Session,或者您应该能够HttpContext.Current.CurrentHandler输入Page,然后访问ViewState

或者,您可以随时将代码放在基类中,您的所有页面都将继承该基类,而不是继承自System.Web.UI.Page

答案 1 :(得分:1)

不,你不使用Session,因为如果你测试Session,你有用户1选择One Columns 1,并且他更改了页面,他将拥有相同的选定列,这是问题,因为当使用initilize页面时,他必须有初始状态,没有选定状态。

从技术上讲,你可以使用Session,但对于我来说,这不是推荐的

答案 2 :(得分:1)

您可以在任何引用System.Web并在Web进程中执行的程序集中使用HttpContext.Current.Session

但是,在Session中放置泛型(即在多个位置重用,非特定键)值将导致各种麻烦。例如,如果用户在同一会话中打开两个浏览器窗口该怎么办?

我建议使用基本Page / Control / UserControl类,或使用页面数据初始化的帮助程序类。您的代码示例看起来更像是属于与控件相关的基类。

答案 3 :(得分:1)

您可以使用System.Web.HttpContext.Current但是您可能会遇到使用此类会话状态的一些同步问题。您可以将GetSortDirection方法添加为页面的扩展方法,这可能更容易实现。