当我写server.transfer("defaul2.aspx");
时
在网址default2.aspx
中未显示,而不是显示defaul.aspx
页面。
当我写response.redirect("default2.aspx");
default2.aspx
页面中的显示有什么不同。
答案 0 :(得分:9)
那是因为Server.Transfer()和Response.Redirect()的工作方式不同。
Server.Transfer()
不会结束当前请求,它只会指示ASP.NET停止呈现当前页面并开始呈现新页面。客户端不是更明智的,从服务器的角度来看,服务器仍在响应初始请求,因此地址栏中显示的URL不会改变。
Response.Redirect()
结束当前请求并向客户端发送302响应代码。然后,客户端向重定向的URL发出另一个 HTTP请求并处理响应。由于客户端知道URL已更改,因此会在其地址栏中显示重定向的URL。
答案 1 :(得分:2)
Response.Redirect方法:
它有助于从代码导航到另一个页面。这就像点击超链接一样。使用按钮单击或链接按钮控件或从服务器端代码使用响应对象的重定向方法从一个页面导航到另一个页面。
使用Response.rediect()方法,您无法从目标页面上的源页面获取信息。
它的源代码就像
VB.Net代码
Private Sub Button1_Click(ByVal Sender as System.Object, ByVal e as System.EventArgs) Handles Button1.Click
'Display target page.
Response.Redirect("Target.aspx")
End Sub
C#代码
private void Button1_Click(Object sender, System.EventArgs e)
{
//Display Target Page.
Response.Redirect("Target.aspx");
}
使用Server.Execute方法
使用Server.Execute方法处理Target Web表单而不离开Source页面。此技术允许您将目标页面的结果嵌入到源页面上的区域。与Server.Transfer一样,它还要求EnableViewStateMac属性将page指令设置为false。
假设我有第一页是Calculate.aspx有两个文本框和一个按钮控件。按钮Click事件。我对Result.aspx执行了另一个aspx页面的Server.Execute。
源代码:
protected void btn_Click(object sender, EventArgs e)
{
Server.Execute("Result.aspx");
}
在Result.aspx pageload事件中写下以下代码。
protected void Page_Load(object sender, EventArgs e)
{
NameValueCollection colform = new NameValueCollection();
colform = Request.Form;
Response.Write("<h2>Additon Result:</h2>" + (Convert.ToInt32(colform["TextBox1"]) + Convert.ToInt32(colform["TextBox2"])));
}