ASP.NET 中会话的替代方案
Alternative to session in ASP.NET
我在项目中有 2 页,比如说 'UserGrid' 和 'User Details'。
'UserGrid' 显示用户列表。单击该行的 ID 列时,合作伙伴将重定向到 'User Details' 页面,该页面显示用户的详细信息。
当合作伙伴点击 ID 时,我将 UserID 存储在会话中并在 'User Deatils' 页面中访问它以获取用户详细信息。
现在假设合作伙伴首先打开 ID 为 1234 的用户,然后他在下一个选项卡中打开 3456。所以现在我们有 2 'User Details' 页面,其中包含 2 个不同的用户数据,但在会话中我们只有第二个选项卡 UserID,因为第一个数据被覆盖了。所以现在如果我要更新第一个用户详细信息,在后台它将更新第二个用户详细信息,因为在会话中第二个用户 ID 存在。
如何以最佳方式管理它,除了查询字符串?
在这些情况下,您必须使用 QueryString
<asp:HyperLink
ID="HyperLink1"
runat="server"
NavigateUrl="~/Webform2.aspx?UserId=1"
Text="User"
</asp:HyperLink>
在用户详情页面获取
private void Page_Load(object sender, System.EventArgs e)
{
int ID = Convert.ToInt32( Request.QueryString["UserId"]);
// get user and display it
}
更多信息:
如果您确实不想在查询字符串中显示 ID,可以将值存储在 ViewState 中。这些是特定于页面实例的,将在回发后继续存在,但不会在重定向后继续存在。
所以也许你需要做:
- 将 ID 存储在会话中
- 重定向到详细信息页面
- 检查视图状态:
- 如果有值,就使用它;
- 否则从 Session 复制到 ViewState
我在项目中有 2 页,比如说 'UserGrid' 和 'User Details'。 'UserGrid' 显示用户列表。单击该行的 ID 列时,合作伙伴将重定向到 'User Details' 页面,该页面显示用户的详细信息。
当合作伙伴点击 ID 时,我将 UserID 存储在会话中并在 'User Deatils' 页面中访问它以获取用户详细信息。
现在假设合作伙伴首先打开 ID 为 1234 的用户,然后他在下一个选项卡中打开 3456。所以现在我们有 2 'User Details' 页面,其中包含 2 个不同的用户数据,但在会话中我们只有第二个选项卡 UserID,因为第一个数据被覆盖了。所以现在如果我要更新第一个用户详细信息,在后台它将更新第二个用户详细信息,因为在会话中第二个用户 ID 存在。
如何以最佳方式管理它,除了查询字符串?
在这些情况下,您必须使用 QueryString
<asp:HyperLink
ID="HyperLink1"
runat="server"
NavigateUrl="~/Webform2.aspx?UserId=1"
Text="User"
</asp:HyperLink>
在用户详情页面获取
private void Page_Load(object sender, System.EventArgs e)
{
int ID = Convert.ToInt32( Request.QueryString["UserId"]);
// get user and display it
}
更多信息:
如果您确实不想在查询字符串中显示 ID,可以将值存储在 ViewState 中。这些是特定于页面实例的,将在回发后继续存在,但不会在重定向后继续存在。
所以也许你需要做:
- 将 ID 存储在会话中
- 重定向到详细信息页面
- 检查视图状态:
- 如果有值,就使用它;
- 否则从 Session 复制到 ViewState