·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 1. Server.Transfer和Response.Redirect

1. Server.Transfer和Response.Redirect

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

1. Server.Transfer和Response.Redirect

今天在使用ServerTransfer和Response.Redirect定位到当前页面来实现刷新页面时,发现了一些现象:

1.使用Response.Redirect刷新本页面,造成当前页面显示的数据消失的情况:

   PRotected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {            String Path;            string connString = "server=.;database=ComInfo;integrated security=true";            SqlConnection conn = new SqlConnection(connString);            conn.Open();            String PassUserid = Request.QueryString["C_Id"];//获取上一页面传递过来的字段值            String strsql = "select E_Id,E_Name,E_Sex,E_Position,E_Organisation,E_Phone,E_Address from Emp where C_Id ='" + PassUserid + " '";            SqlDataAdapter da = new SqlDataAdapter(strsql, conn);            DataSet ds = new DataSet();            da.Fill(ds);            GridView1.DataSource = ds;            GridView1.DataBind();            conn.Close();        }    }    

  A页面,在GridView控件中加一列HypLinkField,其Text值为:详细信息。设置DataNavigateUrlFormatString属性为“~/B..aspx”?C_Id";DataNavigateUrlField属性填写要传递的字段名:C_Id。B页面的.cs文件Load函数中写下以上代码。这样,在A页面点击"详细信息”就能跳转到B页面,在B页面显示Emp表中与C_Id相应的值详细信息。

  

  

  这种情况下,使用Response.Redirect("B..aspx");刷新时,这些显示的信息就会消失。而使用Server.Transfer则不会出现这种状况。

2.使用Response.Redirect刷新本页面不会造成显示信息消失的情况:

    protected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {            String strConn = "server=.;database=ComInfo;integrated security=true;";            String PassUserid = session["C_Id"].ToString();            SqlConnection conn = new SqlConnection(strConn);            conn.Open();            string strsql = "select E_Id,E_Name,E_Sex,E_Position,E_Organisation,E_Phone,E_Address from Emp where C_Id ='" + PassUserid + " '";            SqlDataAdapter da = new SqlDataAdapter(strsql, conn);            DataSet ds = new DataSet();            da.Fill(ds);            GridView1.DataSource = ds;            GridView1.DataBind();            conn.Close();        }    }

  这次页面间传值使用的方法是:Session,在A中用Session["C_Id"]=strId,记录下C_Id的值,在B页面中获取。之后,不管用Response.Redirect还是server.transfer刷新页面,都不会造成数据消失。

分析:第一种方法传递到B页面的值,通过Response.redirect刷新后会释放,导致查询语句查找不到相应的信息。以后再用第一方法进行页面间传值时,要注意使用的跳转语句,不要出现第一种状况。

以下是Server.Transfer和Response.Redirect的对比

1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;2. Server.Transfer可以将页面参数方便传递到指定页面;3. Server.Transfer跳到别的页面后,浏览器显示的地址不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。4. Server.Transfer可以减少客户端对服务器的请求;5.Server.Transfer方法把执行流程从当前的.aspx文件转到同一服务器上的另一个.aspx页面。调用Server.Transfer时,当前的.aspx页面终止执行,执行流程转入另一个.aspx页面,但新的.aspx页面仍使用前一.aspx页面创建的应答流。 Response.Redirect则是客户端第一次请求服务器返回状态代码302及新URL,客户端再次请求新URL,服务器再返回新页面,比Server.Transfer多一次应答。