2

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

        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;
    }

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

他们有什么方法可以从帮助类访问会话吗?我可以通过引用传递会话状态吗?

4

4 回答 4

3

如果我正确理解了这个问题,那么您正在寻找访问ViewStateSession从一个不是页面的类。

如果是这样,您可以使用HttpContext.Current.Session,或者,您应该能够将类型转换HttpContext.Current.CurrentHandler为 type Page,然后访问ViewState.

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

于 2012-07-31T19:07:14.730 回答
1

不,您不使用 Session,因为如果您测试 Session,您有用户 1 选择 One Columns 1,并且他更改页面,他将具有相同的选定列,这是问题,因为在使用初始化页面时,他必须有初始状态和无选择状态。

从技术上讲,您可以使用 Session 但对我来说功能上不推荐

于 2012-07-31T19:06:46.103 回答
1

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

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

我会建议一个基类//Page类,或者一个使用页面数据初始化的辅助类。您的代码示例看起来更像是属于与控件相关的基类。ControlUserControl

于 2012-07-31T19:06:59.720 回答
1

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

于 2012-07-31T19:12:32.093 回答