免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1011 | 回复: 0
打印 上一主题 下一主题

Asp.net 页面导航的几种方法与比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-30 14:43 |只看该作者 |倒序浏览
Asp.net 页面导航的几种方法与比较

转载:http://unue.cn/htdocs/store/00124.php

在ASP.NET应用中,Web表单之间的导航有多种方式:用超级链接,用Response.Redirect,用Server.Transfer,或者用Server.Execute。本文将分析这四种导航方式的异同及其优缺点,帮助你选择最佳的导航方式。
一、超级链接

  从一个表单进入另一个表单最简单的方式是使用HTML超级链接控件。在Web表单中,使用超级链接的HTML代码类如:

<a href="WebForm2.aspx">进入表单2</a>



  当用户点击该超级链接,WebForm2.aspx执行并将结果发送到浏览器。超级链接导航方式几乎可用于任何地方,包括HTML页面和普通的ASP页面。ASP.NET还提供了另一种可替换使用的方法,即HyperLink服务器控件:

<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat="server"
NavigateUrl="WebForm2.aspx">进入表单2</asp:HyperLink>
</form>



  上述HTML代码的运行结果和第一个例子相同,因为ASP.NET把HyperLink Web服务器控件视为一个HTML超级链接控件。但两者有一点重要的区别,HyperLink Web服务器控件可以在服务器端编程。具体地说,可以在程序代码中改变它的NavigateUrl属性,从而允许构造出具体目标可根据应用的当前状态动态变化的超级链接,例如:

Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub



  这段代码执行后,如果用户点击链接,他看到的将是WebForm3.aspx,而不是WebForm2.aspx。

二、用程序控制重定向

  虽然超级链接能够从一个页面导航到另一个页面,但这种导航方式是完全由用户控制的。有些时候,我们可能要用代码来控制整个导航过程,包括何时转到另一个页面。在这些场合,ASP.NET有三种不同的方式可以达到相似的目的:调用Response对象的Redirect方法,调用Server对象的Transfer或Execute方法。这三种导航方式的行为基本相似,但也有区别。

  2.1 Response.Redirect

  Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。

  这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。

  2.2 Server.Transfer

  Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

  如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。

  默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。

  同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。

  2.3 Server.Execute

  Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。

  这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。

  默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。

  为说明其工作过程,下面我们创建一个Web表单,放入一个按钮控件(Button1)和一个文本控件(Literal1),在设计界面中转入代码视图,加入一个System.IO名称空间的Imports语句,然后加入用户点击按钮时执行的代码:

Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute("WebForm2.aspx", sw)
Literal1.Text = sw.ToString()
End Sub



  然后为同一个Web应用创建第二个页面WebForm2.aspx。转入该页面的HTML视图,修改其Page指令禁止ViewState检查:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac="false"%>



  再转到设计视图,为第二个页面增加一些控件。接下来,把第一个页面设置成默认页面,启动应用。点击按钮,WebForm2的控件将显示在WebForm1中放置Literal按钮的地方,注意页面标题和URL仍旧显示原始页面WebForm1。

  用Server.Transfer或Server.Execute方法实现导航时,还要注意一点:最后得到的页面可能不是合法的HTML页面,因为最终返回给客户端的页面可能包含多个<HTML>和<BODY>等标记。IE浏览器看来能够容忍并正确处理这类情形,但如果用户要用到其他的浏览器,最好仔细测试一下。

<b>三、比较与选择</b>

  既然从一个页面导航到另一个页面的办法有这么多,应该如何选择最佳的导航方式呢?下面是一些需要考虑的因素:

  <b>·</b>如果要让用户来决定何时转换页面以及转到哪一个页面,超级链接最适合。

  <b>·</b>如果要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。

  <b>·</b>如果要把用户连接到另一台服务器上的资源,使用Response.Redirect。

  <b>·</b>用Response.Redirect把用户连接到非ASPX的资源,例如HTML页面。

  <b>·</b>如果要将查询字符串作为URL的一部分保留,使用Response.Redirect。

  <b>·</b>如果要将执行流程转入同一Web服务器的另一个ASPX页面,应当使用Server.Transfer而不是Response.Redirect,因为Server.Transfer能够避免不必要的网络通信,从而获得更好的性能和浏览效果。

  <b>·</b>如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。

  <b>·</b>如果要确保HTML输出合法,请使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。






在价格市场有点混乱的互联网时代,空间是五花八门,什么价格的都有,这个时候就导致一些要买空间的人第一句就问,你们的空间多少?而不是你们的空间是什么样的。

如果你只要的价格的话,那么我可以给你说:100M空间几元钱,你要吗?说到这里可能就会有人问了,真的是几元吗?我可以回单说,真的。因为我可以给你开个100M的空间,IIS连接数我给你限制到1个,流量我每天限制到1K。这样的空间你还用不用了?

这个时候可能行家就说了,那可以当做FTP空间用啊,是的,相对来说FTP空间是便宜,就是因为FTP空间不占用其他的资源,所以他相对会便宜点。但它也是需要质量保障的啊。那么我可以再加上一条,每天中断几个个小时。
有的空间供应商说什么空间不限流量,不限IIS,价格也便宜的要死,有的是1G是100元就可以搞到,相信了解这样的朋友知道,俗话说的好:“无规矩不成方圆”,大家都不限制! 做什么都可以! 你的质量从何来保证啊!大家你争我抢.速度慢,不稳定! 有什么用

或者是多少天以后自动关闭。这样的空间你买吗?即使是几元钱,那也是你自己的钱,最重要的是你要用空间的目的。也可能你会因为这几元钱的投入失去很大的人气,也可能你会因为这几元钱投入失去很多客户。这样的几元钱给你带来的是损失而不是价值。

各位哪个用空间不是想要空间能给自己创造的价值呢?
一分价钱一分货的道理大家都是明白的。可怎么在金钱的面前那么容易走进误区呢?

当然也不是越贵的就是越好的,只能说适合自己的才是最好的,购买之前多考虑一下自己的需求,要性价比高的吧。

无论你买谁家的主机,本人依据个人多年购买的经验特别提醒你:
1:不要买不能试用的空间,不能试用的空间你根本就不用看,也不要购买指定测试的什么test空间,
要自主注册实时开通试用的,不信你缴费之后就知道上当了.
2:空间支持的组件要自己上传用asp或者php探针测试,这是自己的空间真正支持的组件.
3:由于中国的网络南北问题,空间商的服务一定要能随时更换线路.
4:售后服务要好,有问题可以马上解决,不要拖三个小时以上,随时有QQ或是MSN支持,等等
5:一定不要图便宜,多花一点钱求个稳定和速度最重要,而且服务器不能经常变动或者调整.



█【万网域名,买空间送域名】█ 一个域名支持100个二级域名

买空间就送域名!信誉第一!在本公司购买任何产品不附加任何条件。注册会员即可购买!

国内英文域名(.cn .com.cn .net.cn)注册 5元/年
国际英文域名(.com .net)注册           48元/年
(注:一个域名支持100个二级域名,解析免费)

【域名介绍】
在线注册,即时注册成功,自己注册填写资料,支持URL转发,转发隐藏。
1.域名管理地址:http://diy.hichina.com/cgi-bin/login(可在万网管理)
2.会员中心:http://unue.cn/htdocs/store/member.php
3.独立控制面板:http://www.ns365.net

【50M动态空间】         

          > 50MB独立网站空间 50MB邮局
          > 支持ASP/Access
          > FSO组件,Jmail组件,动易组件
            AspUpload组件,AspJpeg组件
          > Asp脚本语言 免费三级域名
          > 主机控制面板 购买实时开通
          > 数据定期备份
          > 千兆防火墙 不间断电源
  
   价格:¥56.00元/1年 详情:http://www.unue.cn/htdocs/store/viewproduct.php?product_id=37   


【100M动态空间】
                  
           > Windows或者Linux平台任意选择
           > 100MB独立网站空间 50MB邮局
           > 支持ASP/PHP/JSP
           > Access/5M Mysql数据库
           > FSO组件,Jmail组件,动易组件
             AspUpload组件,AspJpeg组件
           > phpMyAdmin管理面板
             PHP脚本语言 Zend加密程序 JSP脚本语言
           > 主机控制面板 购买实时开通
             数据定期备份 千兆防火墙 不间断电源

   价格:¥88.00元/1年(单线)  详情:http://www.unue.cn/htdocs/store/viewproduct.php?product_id=8
   价格:¥120.00元/1年(双线) 详情:http://www.unue.cn/htdocs/store/viewproduct.php?product_id=54


【美国主机1型】
  
           > Windows平台
           > 100MB网页 50MB邮局
           > 支持ASP, Access
           > FSO组件,Jmail组件,AspUpload组件
             AspJpeg组件,动易组件
           > 美国电讯主干数据中心
           > 免费三级域名,主机控制面板
           > 购买实时开通,数据定期备份
           > 千兆防火墙,不间断电源
           > 双路市电+UPS+后备发电机
           > 全球访问高速稳定

   ¥260.00元/1年 详情:http://www.unue.cn/htdocs/store/viewproduct.php?product_id=71

需要其他大型空间或者其他类型空间请联系客服或者登录网站获取
【空间双线】:系统自动识别,无需选择线路!
【域名注册】:自己注册,自己管理

公司网站:http://www.unue.cn
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP