我有一个注册表单,想将用户转移到成功页面,告诉他一封电子邮件已发送到他的电子邮件。我需要将他的电子邮件从注册页面转移到成功页面。
我找到了关于 Server.Transfer 的信息,但我不知道如何发送参数。我不想使用查询字符串,因为我不喜欢在 URL 中透露信息。
这样做的正确方法是什么(如果可能)?
我有一个注册表单,想将用户转移到成功页面,告诉他一封电子邮件已发送到他的电子邮件。我需要将他的电子邮件从注册页面转移到成功页面。
我找到了关于 Server.Transfer 的信息,但我不知道如何发送参数。我不想使用查询字符串,因为我不喜欢在 URL 中透露信息。
这样做的正确方法是什么(如果可能)?
Server.Transfer("destination.aspx", true)
您可能会看到上面的代码包含控件被转移到的页面的名称和一个布尔值“True”,以指示在目标页面中保留当前表单状态。
在您的登录页面中设置一个属性并在其中存储电子邮件。
完成后,做一个Server.Transfer("~/SuccessPage.aspx", true);
在您重定向的另一页上,您应该检查类似的内容:
if(this.PreviousPage != null) {
((LoginPageType)this.PreviousPage).MyEmailProperty;
}
当您使用服务器传输时,您只需将执行移动到不同的服务器处理程序,用户将看不到新的 url 或参数,因此可以安全地进行此传输。
我宁愿建议您以不同的方式进行操作。
当用户单击注册按钮时,您验证一切,然后从仍然当前页面发送电子邮件(因此您根本不需要将数据传输到另一个页面)。如果一切顺利,您只需重定向:
Response.Redirect("/order/success.aspx");
如果出现问题(验证错误、发送电子邮件导致异常),您仍然在正确的页面上进行重试。在大多数情况下,我根本不会使用 Server.Transfer。
您必须在某处保留该值。显而易见的选项在 Session 对象或数据库中。
对于这种用例。您可以使用 Context.Items 使用键保存数据,并使用您正在执行 Server.Transfer 的子页面中的相同键读取值。Context.Items 对您来说是一种按请求范围内的缓存。
Context.Items['DataKey'] = Data;
Server.Transfer("~/AnyRouteRelativePath", true);