【问题标题】:How to retain the previous page values in asp.net如何在asp.net中保留前一页的值
【发布时间】:2013-02-19 22:19:45
【问题描述】:

我正在使用 asp.net 网络表单。我在一个表单中收集用户输入,比如 Page1,其中包含几个服务器控件,例如文本框、组合框和单选按钮。当用户单击保存按钮时,将显示一个新页面,例如 Page2,其中显示所有输入的值以供验证。 Page2 在 Page1 的按钮点击事件中通过 Server.Transfer("~/Page2") 方法显示。在Page2中,用户输入的值是通过读取PreviousPage属性得到的,如下所示:

var memberData = PreviousPage.dependentData;

Page2 有一个取消按钮。当用户发现一些数据输入错误并想返回到 Page1 时,他们可以点击这个按钮。取消按钮点击事件在客户端运行如下代码:

if (confirm('Are you sure to leave this page?')) {
                window.history.back(1);
            }

问题是,当到达 Page1 时,所有用户输入的值都消失了。请让我知道如何构建这两个页面,以便保留上一页 (Page1) 中的值。

谢谢

【问题讨论】:

  • 会话、cookies、viewstate、查询字符串,这一切都取决于数据的敏感性,以及有多少数据

标签: asp.net


【解决方案1】:

您必须将这些值保存在某处,以便两个页面都可以访问它们。大多数情况下,这是在数据库中完成的,但您也可以使用 SessionCache,或者如果需要,甚至可以使用 Cookie

由于这是特定于用户的,我怀疑 Session 是您最好的选择。创建一个简单的数据结构来匹配您的数据并将其保存到会话中:

public class UserData{
   public String Name {get; set;}
   public Int32 Age {get; set;}
}

那么当用户提交页面时:

var userData = new UserData();
userData.Name = //Get from form;
userData.Age = //Get from form;

HttpContext.Current.Session["UserData"] = userData;

然后在加载您的其他页面时:

var userData = HttpContext.Current.Session["UserData"] as UserData;

if(userData != null){
   //Do some stuff!
}

现在...请注意,请注意。例如,如果您在 load balancer 后面的多个服务器上运行它,那么您需要确保您使用的是粘性会话,或者至少是某种持久的 Session Provider

我想我的意思是在将其添加到您的应用程序之前先做一些功课:)

【讨论】:

  • 感谢您的建议。如果我将 Server.Transfer() 更改为 Response.Redirect(),会有帮助吗?
  • @user466663 - 它没有任何区别。当您执行 Server.Transfer() 时,它只是将与原始请求关联的所有请求信息传递到新页面。您仍然必须使用 Session 或其他一些机制来持久化信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多