使用Server.Transfer但不使用查询字符串传递参数

时间:2012-04-26 13:07:35

标签: c# asp.net server.transfer

我有一个注册表,想要将用户转移到成功页面,告诉他已将电子邮件发送到他的电子邮件中。我需要将他的电子邮件从注册页面转移到成功页面。

我发现了Server.Transfer,但我找不到如何发送参数。我不想使用查询字符串,因为我不喜欢在URL中显示信息。

这样做的正确方法是什么(如果可能的话)?

6 个答案:

答案 0 :(得分:5)

Server.Transfer("destination.aspx", true)

您可能会看到上面的代码包含控件传输到的页面的名称,以及布尔值“True”,表示在目标页面中保留当前的表单状态。

答案 1 :(得分:3)

在登录页面中设置一个属性并将其存储在电子邮件中。

完成此操作后,请执行Server.Transfer("~/SuccessPage.aspx", true);

在您重定向的另一个页面上,您应该检查以下内容:

if(this.PreviousPage != null) {
    ((LoginPageType)this.PreviousPage).MyEmailProperty;
}

答案 2 :(得分:2)

当您使用服务器传输时,您只需将执行移动到不同的服务器处理程序,用户将看不到新的URL或参数,因此可以安全地进行此传输。

答案 3 :(得分:2)

我宁愿建议您采用不同的方式。

当用户单击注册按钮时,您将对其进行全部验证,然后从当前页面发送电子邮件(因此您无需将数据传输到其他页面)。如果一切顺利,你只需重定向:

的Response.Redirect( “/订单/ success.aspx”);

如果出现问题(验证错误,发送电子邮件导致异常),您仍然在正确的页面上进行重试。在大多数情况下,我根本不会使用Server.Transfer。

答案 4 :(得分:1)

你必须在某个地方坚持这个价值。显而易见的选项位于Session对象或数据库中。

答案 5 :(得分:1)

对于这种用例。您可以使用Context.Items来保存带有密钥的数据,并使用与正在执行Server.Transfer的子页面相同的密钥读取值。 Context.Items为您提供了每种请求范围的缓存。
Context.Items['DataKey'] = Data;
Server.Transfer("~/AnyRouteRelativePath", true);