您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp.net >> 正文

ASP.NET极限:页面导航 (翻译)

作者:作者:未…    信息学院来源:网络收集    点击数:    更新时间:2006-8-28 我要参与讨论

   

Rob Howard

在我的小时候,我每年都会花几周的时间呆在我的大家庭里。作为一个年幼的美国小男孩我当时非常着迷荷兰电力火车,一些在我的家乡--德克萨斯州达拉斯所没有见到过的事情。我的堂兄招待我乘坐他们的小船去看经过的火车。坐在靠近车轨的水上可以听到渐近的火车,像是轻轻的口哨穿过铁轨,直到火车呼叫而过时奏出一个缓慢的高潮。在考虑ASP.NET 2.0时使我不由想起了这个。ASP.NET 2.0已经十分接近而且我们大部分都在热切期望它的发布能早点到来,我们甚至听到了发布继续越来越响的“呜”声。届时我们编写软件的方式将会改变,再一次。

微软 ASP.NET 2.0的目标是提供开发者的效能50%。然而,实际的效能提升似乎超过了预期。新的personalization, membership和角色管理特性拿掉了开发者的负担,而其他的特性,像数据绑定,也被简化了。例如,我们熟悉并依然被支持的语法:

<%# DataBinder.Eval (Container.DataItem, "FirstName") %>
 

在ASP.NET 2.0 却可以简化为:

<%# Eval("FirstName") %>
 

不仅有大量的另人印象深刻的新特性,还有大量的极具意义的服务器控件。由于服务器控件像<ASP:login>控件对membership的整合和新的data source和数据控件服务器控件,ASP.NET编程模型将在ASP.NET 2.0中变得更加强大。

在ASP.NET 2.0中System.Web类库的数量几乎翻倍--覆盖太多甚至需要杂志专栏连载。为了真正理解这些改变的程度,您需要一本新的ASP.NET 2.0的书。我计划在这撰写一些专栏来突出一些比较重要的ASP.NET 2.0的新特性。本月刊我将重点放在导航和页面流程,以众人寻求的特性--提交给其它页面能力作为开始。

跨页投递

我从迁移到ASP.NET开发者们那里听到抱怨最多的是页面的回发模型,ASP.NET页面可以拥有单一的<form>并且只能HTTP回发给自己,这样所有的处理逻辑都将运行在这个页面里。

许多开发者,特别是那些熟悉ASP,喜欢控制<form>元素的,会了解ASP中可以指示<form>将自己的内容数据提交到何处和如何发送(HTTP Post 或 HTTP Get),以及同一页面上<form>的数量。但与ASP相比,ASP.NET中仅允许页面只有一个<form runat=server>,并且只能回发给自己。这点可能令人十分懊恼,下面是ASP.NET2.0中发送给其他页面的示例:

<%@ Page MasterPageFile="~/Site.master" Language="C#"
    CodeFile="Source.aspx.cs"
    Inherits="Source" %>


<ASP:Content ID="MainContent"
        ContentPlaceHolderID="Main" Runat="server">
    Enter your name:
    <ASP:TextBox ID="NameBox" Runat="server"></ASP:TextBox>
    <ASP:Button ID="Button1" Runat="server" Text="Submit" />
</ASP:Content>

 

Master Pages用来控制页面布局,带有一个<ASP:content>块,有一些服务器控件来接受用户输入。

如果打算将内容传递到另一个页面,可以采用类似下面的服务器代码:

Response.Redirect("Target.aspx?Name= " +
    HttpUtility.UrlEncode(NameBox.Text));

 

这种技术的问题是当用户点击按钮提交后,服务器接受请求并发送一个响应令浏览器转向Taget.aspx,这样简单的问题却做了大量的工作!

能不能简化工作呢?在ASP.NET 2.0中答案是肯定的。接下来演示改进后的代码:

<%@ Page MasterPageFile="~/Site.master" Language="C#"
    CodeFile="Source.aspx.cs"
    Inherits="Source" %>


<ASP:Content ID="MainContent"
        ContentPlaceHolderID="Main" Runat="server">
    Enter your name:
    <ASP:TextBox ID="NameBox" Runat="server"></ASP:TextBox>
    <ASP:Button ID="Button1" Runat="server" Text="Submit"
        PostBackUrl="~/Target.aspx" />
</ASP:Content>

 

注意<ASP:Button>中的PostBackUrl属性,这个属性会通知按钮不再执行默认的回发而是直接提交数据到Target.aspx.

您可能想知道这是如何运作的,尤其您熟悉ASP.NET的ViewState对象时。不过那超出了本文的范围,当跨页投递特性被使用时页面会新增一个隐藏域:

<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE"
&

[1] [2] [3] 下一页

在google里搜索更多ASP.NET极限:页面导航 (翻译)

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明