Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Server.Transfer传递参数,但不使用查询字符串_C#_Asp.net_Server.transfer - Fatal编程技术网

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

C# 使用Server.Transfer传递参数,但不使用查询字符串,c#,asp.net,server.transfer,C#,Asp.net,Server.transfer,我有一个注册表格,想把用户转到成功页面,告诉他一封电子邮件已发送到他的电子邮件。我需要把他的邮件从注册页面转到成功页面 我找到了关于Server.Transfer的信息,但找不到如何发送参数。我不想使用查询字符串,因为我不喜欢在URL中显示信息 什么是正确的方法(如果可能的话)?您必须将该值保留在某个地方。明显的选项在会话对象或数据库中 Server.Transfer("destination.aspx", true) 您可能会看到,上面的代码包含控件传输到的页面的名称和一个布尔值“True”

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

我找到了关于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。

用于此类用例。您可以使用Context.Items使用键保存数据,并使用正在执行Server.Transfer的子页面中的相同键读取值。项是一种按请求作用域缓存。
Context.Items['DataKey']=Data


Server.Transfer(“~/AnyRouteRelativePath”,true)

在某些情况下,这是一种很好的方法。。。也许是最好的。嗨,这正是我的代码目前的工作方式。当一切正常时,用户才会被发送到成功页面。你是对的,我使用查询字符串制作了一个非常简单的过程。用户看不到发生了什么,太好了。谢谢,如果我不能使用Sever.Transfer.Session state存储查询字符串,那么隐藏查询字符串会很有用。当我只想用它一次的时候,它会留在记忆中。我同意,但我说你必须把它保留在某个地方是正确的。最终,它变成了查询字符串,这比会话更好,但您的问题倾向于不使用它。是的,我知道,我标记了您的问题。我不知道server.transfer保留了以前的URL,因此查询字符串现在是可行的。谢谢,谢谢,谢谢--在global.asax应用程序_错误中使用它进行自定义错误处理时,这也非常有效。。。我试图为XSS保留默认的requestvalidation,但显示了一个带有错误的自定义错误屏幕-由于4.5中请求验证的事件模型,我尝试的大多数事情都会保留重新出错。通过这种方式,我将其添加到缓存中,并在错误页面中检索-perfect。