当在一个ASP.NET Web页面中进行操作时,在默认情况下向当前页进行提交。这种行为在ASP.NET出现之前并没有什么关系,但在ASP.NET中当我们想向另外一个 Web页提交一个Web Form时该如何做呢?在ASP.NET1.0中这个问题变得很难解决,但在ASP.NET2.0中为开发人员提供了更容易的解决的技术:跨网页提交。这种技术允许一个网页在提交数据时提交给另外的一个页面。在跨网页提交中,用于初始化提交代码的页面叫源页面,而客户提交的页面叫目标页面。
为了方便起见,目标页面仍然获得原页面提交的所有数据。换名话说,从技术观点出发,我们可以用同样的方式处理其他ASP.NET页面提交的数据。
这个新特性意味着ASP.NET2.0开发人员目前有三种可供选择的技术来将数据从一个web页面传送到另外一个页面。这三种方法是:响应重定向,服务端传输和新的跨网页提交特性。我们可以已经熟悉前两种技术了,因此,我们只是简要地复习一下它们,然后我们会将主要精力放到学习如何使用跨网页提交特性,以及阐述一下这种方法和响应重定向以及服务传输方式有什么不同。
一、响应重定向方法
响应重定向方法是目前为止将一个网页重定向到另一个网页的最简单的方法的最简单的方法。当Web服务器接到一个重定向请求后,它会将一个响应头送给客户端,这将导致客户端发送一个新的请求到服务器。按句话说,一个重定向请求实际上是两个请求响应:一个是最初的请求响应,另一个是新的重定向请求响应。
在ASP.NET中实现重定向很容易。下面的代码演示了如何使用Response.Redirect方法实现网页重定向:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx");
}
要注意的是重定向请求只是一个GET请求,这就意味着我们不能从源页中通过重定向命令提交数据。但是我们可以在重定向中使用查询字符串来传递数据。如下面代码所示:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx?userName=" + UserName.Text));
}
上面的例子将一个查询字符串作为参数传递给了Response.Redirect方法的目标URL。我们可以通过如下的代码获得源数据。
protected void Page_Load(object sender, EventArgs e)
{
string userName = Request["userName"];
}
二、服务器传输方法
和依赖于客户端向另一个新页发请求不同,服务器传输是一种服务器重定向技术,这种技术通过简单的改变Web服务器所处理的代码来达到请求一个新页的目的。当被请求页和源页面在同一个服务器时,服务器传输要比Response.Redirect方法更有效,这是由于这种技术可以避免额外的开销,仅仅使用服务器的资源就可以进行重定向。要注意的这种技术有一个副作用,在页面进行重定向时,客户端的URL仍然会保持源页面的URL,这可能会使客户认为他们所获得的数据是源页面产生的。当然,在大多数情况下,这不是问题,但是这将使调试变得更困难。
Server.Transfer方法还可以保存初始页的HttpContext。因此,目标页可以访问源页面的值。我们可以使用FormsCollection属性来从目标页面中获得源页面的值。首先,要确定我们使用了被重载的方法,这个方法有两个参数:目标URL和一个Boolean类型的值,告诉服务器是否保存用于描述源页面值的 Form。如下