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的新手,所以我不确定如何做一个扩展方法。我想我有一些挖掘工作要做。我研究了你创建基类的想法,它非常简单!