如何从一个ASP.NET页面重定向到另一个页面

6

如何通过按钮从一个ASP.NET页面重定向到另一个页面(“Webform2.aspx”)?


1
Response.Redirect 应该可以正常工作。 - Ruben
对于路由方面的开发者来说,Response.RedirectToRoute是一个常用的方法。 - The Muffin Man
可能是aspx页面重定向到新页面的重复问题。 - Michael Freidgeim
8个回答

11
您可以使用Response.Redirect()将页面从一个页面重定向到另一个页面。

我该如何重定向到另一个网站? - Pranav MS

8

设置按钮的PostBackUrl属性,例如:

button1.PostBackUrl= "Webform2.aspx";

我本来想点赞这个概念很好(如果只是加载新页面就不需要回传),但是“Button”没有“NavigateUrl”属性。 - Town

3
您可以使用以下代码将页面重定向到另一个ASP.NET页面:

Response.Redirect("Webform.aspx");

这是最简单的方法。

2
有很多种方法可以实现页面跳转。包括: Response.Redirect, Server.Transfer, 以及调用Javascript。
当按钮没有服务器端操作时,需要使用Javascript来实现跳转。例如:onclick="javascript:window.location.href = Webform2.aspx?id='<%=Request.QueryString["id"]%>'" Server.Transfer 可以在服务器端进行重定向。也就是说,浏览器仍然会显示Webform1.aspx的内容,但请求会被重定向到Webform2,Webform2会返回响应。(Req = 1, Res = 1) Response.Redirect:Webform1会发送一个响应,要求浏览器发起一个新的请求到Webform2。在这种情况下,浏览器会更改URL,因为它正在发起对Webform2的新请求。(Req = 1 + 1, Res = 1+1)
还有一种方式是使用传统的HTML表单提交:form.submit()
最后,还有一种最好的方法是使用PostBackUrl实现跨页面回发。详情请参考:http://aspdotnetcode.source-of-humor.com/TipsAndTricks/General/CrossPagePostbackAspNetCrossPagePostback.aspx

2

如果您只想在单击按钮时加载新页面,个人建议使用客户端脚本来实现。

您可以使用JavaScript库(例如:jQuery)来实现:

jQuery

$(function() {
  $('#<%= button1.ClientID %>').click(function() { 
      window.location.href = "Webform2.aspx"; 
      });
});

ASP.NET

<asp:Button id="button1" runat="server"/>

或者,针对ASP.NET的特定方法,您可以像Antonio建议的那样使用Button.PostBackUrl,它仍然使用客户端脚本,但意味着您不必自己编写代码。按钮的HTML呈现如下:
<input type="submit" name="button1" value="Button" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;button1&quot;, &quot;&quot;, true, &quot;&quot;, &quot;webform2.aspx&quot;, false, false))" id="button1" />

如果您需要在服务器端执行其他处理,并且之后需要重定向,请在单击处理程序中使用Response.Redirect("Webform2.aspx");
如果这对您不起作用,请在问题中添加更多细节以解释发生了什么。

使用window.location.href = "somepage.aspx"会触发一个post back吗?如果是,有没有一种方法可以在没有post back的情况下完成,就像浏览器的后退按钮一样? - eran otzap

1

Response.Redirect(string url)发出302 HTTP状态代码,指示客户端重定向到url。浏览器将为url发出新请求,并且地址栏中的URL将更改。

Server.Transfer(string path)终止当前页面的执行,并在指定的path内部启动新页面的执行,即在IIS内部。因此,浏览器地址栏中的URL不会更改。您要转移到的页面必须是同一网站中的aspx页面。

这两者之间的区别微妙但重要。一个简单的思路是问自己“用户是否应该收藏/添加此URL到书签?”。如果URL已更改,并且未来访问内容应在新URL上,请使用Response.Redirect。如果URL正确且当前,但您需要仅此一次显示不同的内容-可能正在显示错误消息或需要用户输入其凭据以继续或存在其他原因导致内容应更改但URL不应更改,请使用Server.Transfer
在您的代码后台中,可以在ASP.NET按钮控件的Click事件处理程序中使用以上任意一种方法。
protected void Button1_Click(object sender, EventArgs e)
{
    Response.Redirect("Webform2.aspx");
      // OR
    Server.Transfer("Webform2.aspx");
}

1
您可以使用以下代码:

protected void Button1_Click(object sender, EventArgs e) {
    Response.Redirect("default2.aspx");
}

请注意,default2.aspx 是您的第二个网页名称,并且您需要保留它。

0

Response.Redirect和Server.Transfer方法都用于将用户从一个Web页面转移到另一个Web页面。这两种方法用于相同的目的,但仍存在以下一些差异。

Response.Redirect方法重定向请求到新URL并指定新URL,而Server.Transfer方法用于当前请求,终止当前页面的执行,并使用指定页面的URL路径开始执行新页面。

Response.Redirect和Server.Transfer具有相同的语法,例如:

Response.Redirect("UserDetail.aspx"); Server.Transfer("UserDetail.aspx");

在深入探讨更多细节之前,我想先解释一些HTTP状态码,这对于理解这两者之间的基本区别非常重要。HTTP状态码是Web服务器用来与Web浏览器或用户代理通信的代码。 Response.Redirect向浏览器发送一个HTTP请求,然后浏览器将该请求发送到Web服务器,然后Web服务器向Web浏览器提供响应。例如,假设您正在网页“UserRegister.aspx”页面上,并且它有一个按钮,可以将您重定向到“UserDetail.aspx”网页。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接