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 

}

更多信息:

HttpRequest.QueryString Property

Passing variables between pages using QueryString

如果您确实不想在查询字符串中显示 ID,可以将值存储在 ViewState 中。这些是特定于页面实例的,将在回发后继续存在,但不会在重定向后继续存在。

所以也许你需要做:

  • 将 ID 存储在会话中
  • 重定向到详细信息页面
  • 检查视图状态:
    • 如果有值,就使用它;
    • 否则从 Session 复制到 ViewState