Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 助手类中的引用会话_C# - Fatal编程技术网

C# 助手类中的引用会话

C# 助手类中的引用会话,c#,C#,所以我有一个从互联网上“借用”来的方法,我在我的许多页面上使用它来处理网格列的排序 private string GetSortDirection(string column) { // By default, set the sort direction to ascending. string sortDirection = "ASC"; // Retrieve the last column that was so

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

        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。因此,我想将其移动到我的helper类中,并将其存储在会话状态中,但是,我可以在helper类中引用这两种状态


他们是否可以通过帮助类访问会话?我可以通过引用传递会话状态吗?

否您不使用会话,因为如果您测试会话,您的用户1选择了一列1,并且他更改了页面,他将具有相同的选定列,这是一个问题,因为在使用initilize页面时,他必须具有初始状态,并且没有选定状态


从技术上讲,您可以使用Session,但从功能上讲,我不建议您在引用System.Web并在Web进程中执行的任何程序集中使用
HttpContext.Current.Session

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


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

如果我正确理解了这个问题,您希望从非页面的类访问
ViewState
Session

如果是这样,您可以使用
HttpContext.Current.Session
,或者,您应该能够键入
HttpContext.Current.CurrentHandler
以键入
页面
,然后访问
视图状态


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

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

我不需要将其存储在会话中,我的真正目的是消除所有重复的方法。您还可以创建BasePage,并在页面继承中,在此类中设置您的常用方法。我是asp.net的新手,所以我不确定如何做一个扩展方法。我想我有一些挖掘工作要做。我研究了你创建基类的想法,它非常简单!