2017-04-05 60 views
0

我使用server.execute来隐藏URL中的查询字符串,但我发现另一个问题,当我在页面1中并单击一个按钮将页面传输到页面2,页面1的内容仍然显示在页面2的内容页面中。两页都显示给我。我该如何解决这个问题?Server.Execute()在当前页面打开新页面

我的代码示例。在页面1中,有一个按钮,我在点击事件中添加了这段代码。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Server.Execute("Page2.aspx?Name=john"); 
} 

在页面2中,有一个文本框用于读取查询字符串值。

TextBox1.Text = Request.QueryString["Name"].ToString(); 

我在查询字符串中发送多个值,但这只是一个示例。然而,页面1和页面2的内容都显示在一个页面中,点击应该转移到第2页的按钮。

+0

该服务器获取你的价值观。执行是为了使用StringWriter将url输出到字符串,你想要做什么。 – Anil

回答

0

由于server.execute将控制权转移回原始页并继续执行,因此您将看到两页的输出。为了转移请求完全使用Server.TransferRequest

Page1.aspx的:添加查询字符串值NameValueCollection

  NameValueCollection nv = new NameValueCollection(); 
      nv.Add("Name","john"); 
      Server.TransferRequest("Page2.aspx",true,"GET", nv); 

Page2.aspx:从Request.Header

  TextBox1.Text = Request.Headers.Get("Name"); 
+0

其实我更喜欢使用Server.Execute()来防止这里声明的错误。 https://support.microsoft.com/en-us/help/312629/prb-threadabortexception-occurs-if-you-use-response.end,-response.redirect,-or-server.transfer – user1947393

+0

我已更新我的回答,您应该将代码添加到问题中,以更深入地调查您的需求。 – Anil

+0

我也更新了我的问题。 – user1947393

1

使用Server.Transfer代替Server.Execute。 查看此以了解差异。 Difference between both

当使用使用Server.Execute,一个URL传递给它作为参数,并且控制转移到这个新页面。代码的执行发生在新页面上。一旦代码执行完毕,控制权就会返回到初始页面,就在它被调用的地方之后。但是,在Server.Transfer的情况下,它的工作原理非常相似,区别在于执行停止在新页面本身(意味着控件不会返回到调用页面)。 在这两种情况下,浏览器中的URL仍然是第一页的url(不刷新到新页面的URL),因为浏览器没有被要求这样做。

+0

其实我更喜欢使用Server.Execute()来防止这里声明的错误。 https://support.microsoft.com/en-us/help/312629/prb-threadabortexception-occurs-if-you-use-response.end,-response.redirect,-or-server.transfer – user1947393

+0

您可以指定一个将postbackurl属性添加到按钮并将其用于跨页面发布。检查此链接:[链接](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.postbackurl(v=vs.110).aspx) – Srikanth