本书以虚拟的Wrox Car Company站点以及一系列相关网页为示例,详细讲述如何利用各种ASP.NET web Forms技术和相关的.NET Framework技术,创建一个可方便选择、配置和订购汽车的站点。与此同时,本书还考虑到各种复杂的情况,实现了与多种浏览器的兼容,并为存在某些功能缺陷的用户提供了解决方案,从而使您的Web应用程序尽善尽美。\r\n 本书适合于对ASP.NET Web Forms和.NET Framework有一定了解的读者。
第1章 开始\r\n\r\n1.1 为什么使用ASP.NET\r\n1.1.1 对术语的注释\r\n1.1.2 ASP.NET基础\r\n1.2 设计交互式Web站点\r\n1.2.1 站点总体设计\r\n1.2.2 Home页面\r\n1.2.3 汽车型号详情(Model Details)页面\r\n1.2.4 比较特性页面\r\n1.2.5 订单页面\r\n1.2.6 其他“外围”页面\r\n1.3 小结\r\n\r\n第2章 浏览器与ASP.NET服务器控件的兼容性\r\n\r\n2.1 内置智能\r\n2.2 测试应用程序\r\n2.3 查看测试页面\r\n2.3.1 服务器控件Hyperlink\r\n2.3.2 Navigator理解Style属性\r\n2.3.3 Calendar控件\r\n2.4 指定高层和低层客户端\r\n2.5 列表控件格式设置和模板的应用\r\n2.5.1 DataList控件的输出\r\n2.5.2 为DataList控件添加模板\r\n2.5.3 更复杂的DataGrid控件\r\n2.5.4 在DataGrid控件中指定列信息\r\n2.6 处理缺少客户端脚本支持的情况\r\n2.6.1 示例:Amaya中的LinkButton控件\r\n2.6.2 解决“没有脚本”的问题\r\n2.6.3 ASP.NET的Validation控件\r\n2.7 ASP.NET的Panel控件\r\n2.8 与输出缓存功能相关的注意事项\r\n2.8.1 通过浏览器版本缓存\r\n2.8.2 通过客户端目标实现缓存\r\n2.9 小结\r\n\r\n第3章 基础知识\r\n\r\n3.1 获得示例文件\r\n3.2 Wrox Car Company站点的客户端的技术需求\r\n3.2.1 支持或需要的标准\r\n3.2.2 ASP.NET会话\r\n3.2.3 客户端脚本\r\n3.2.4 在Wrox Car Company站点中的用户和用户ID\r\n3.3 检查是否支持会话和脚本\r\n3.3.1 检测客户端的功能和用户ID\r\n3.3.2 default.aspx页面中的代码\r\n3.3.3 default.aspx页面中的HTML和内容\r\n3.3.4 no-script.htm页面\r\n3.3.5 home.aspx页面中的检测代码\r\n3.3.6 no-sessions.htm页面\r\n3.4 跨浏览器兼容性问题\r\n3.5 解决浏览器兼容性问题\r\n3.6 使所有访问者可以访问站点\r\n3.7 小结\r\n\r\n第4章 Home页面\r\n\r\n4.1 页面整体结构\r\n4.2 为页面设置样式\r\n4.3 提供可访问性导航辅助功能\r\n4.3.1 实现“SkipT。”链接\r\n4.3.2 记住那些“title”和“alt”属性\r\n4.4 指向其他页面的链接\r\n4.5 “新闻和特别服务”部分\r\n4.5.1 “新闻”列表的数据访问代码\r\n4.5.2 选择合适的ASP.NETList控件\r\n4.5.3 “新闻”列表中的静态部分\r\n4.5.4 “新闻”列表使用的ASP.NET Repeater控件\r\n4.6 汽车型号列表\r\n4.6.1 选择合适的列表控件\r\n4.6.2 更改已启用脚本的客户端的行为\r\n4.6.3 “Car Models”列表的数据访问代码\r\n4.6.4 “Car Models”列表的DataGrid控件\r\n4.7 小结\r\n\r\n第5章 旗标、页脚和电子邮件\r\n\r\n5.1 关于ASP.NET用户控件\r\n5.1.1 可重用代码和内容\r\n5.1.2 创建用户控件\r\n5.1.3 在ASP.NET页面中使用用户控件\r\n5.2 动画页面旗标\r\n5.2.1 创建动画旗标控件\r\n5.2.2 使用动画旗标控件\r\n5.3 页脚部分\r\n5.3.1 页脚中的动态超链接\r\n5.3.2 创建页脚控件\r\n5.3.3 使用页脚控件\r\n5.4 在邮件列表中添加用户\r\n5.4.1 提交电子邮件地址的控件\r\n5.4.2 处理电子邮件地址的代码\r\n5.5 小结\r\n\r\n第6章 辅助页面\r\n\r\n6.1 辅助页面的结构\r\n6.1.1 总体布局\r\n6.1.2 “Terms & Conditions”和“Contact”页面\r\n6.1.3 MainLink用户控件\r\n6.2 静态或动态内容的选择\r\n6.2.1 使静态的内容动起来\r\n6.2.2 使动态的内容静态\r\n6.3 “Read News ltem”页面\r\n6.3.1 在页面中插入动态内容\r\n6.3.2 “ReadNews”页面的HTML和代码\r\n6.4 Compare MOdels页面\r\n6.4.1 复杂图像的访问性问题\r\n6.4.2 构建“Compare Models”页面\r\n6.4.3 测试可访问性\r\n6.5 小结\r\n\r\n第7章 创建图形和图表\r\n\r\n7.1 动态生成的图形和图像\r\n7.1.1 性能和高速缓存\r\n7.1.2 在Web页面中使用动态图像\r\n7.2 .NET Frame WOrk绘图类\r\n7.3 创建一个简单饼图\r\n7.3.1 提供数据源\r\n7.3.2 饼图示例页面\r\n7.3.3 在图像中创建和使用颜色\r\n7.3.4 通用饼图例程\r\n7.4 汽车比较图表\r\n7.4.1 为图表获得值和数据\r\n7.4.2 绘制适当的图表\r\n7.4.3 绘制直线图表\r\n7.4.4 绘制条形图\r\n7.5 小结\r\n\r\n第8章 交互式Web Forms\r\n\r\n8.1 满足设计要求\r\n8.1.1 初步设计\r\n8.1.2 支持无脚本功能的客户端\r\n8.1.3 支持仅文本的客户端\r\n8.1.4 支持页面阅读器(Page-Reader)客户端\r\n8.1.5 保存报价并关闭窗口\r\n8.2 Model Details页面纲要\r\n8.2.1 打开Model Details页面\r\n8.2.2 使用回送结构\r\n8.2.3 框架操作\r\n8.2.4实现“tabbed对话框”\r\n8.2.5 处理没有客户端脚本支持的情况\r\n8.2.6 保存报价和订单\r\n8.3 Model Details页面的结构\r\n8.3.1 导入和注册IEWeb控件\r\n8.3.2 页面的HTML部分\r\n8.4 小结\r\n\r\n第9章 交互式的型号细节页面\r\n\r\n9.1 用于Model Details页面的数据\r\n9.1.1 汽车细节数据库表\r\n9.1.2 用于Model Details页面的存储过程\r\n9.1.3 金融PMT值表\r\n9.1.4 获取和存储页面数据\r\n9.2 Model Details页面中的代码\r\n9.3 “Model Details”选项卡页面详解\r\n9.3.1 颜色选择部分\r\n9.3.2 引擎选择部分\r\n9.3.3 “可选配件”选择部分\r\n9.3.4 “标准特性”(Details)部分\r\n9.3.5 金融服务选择部分\r\n9.4 小结\r\n\r\n第10章 汽车价格和报价\r\n\r\n10.1 计算汽车的价格\r\n10.2 计算金融条款\r\n10.2.1 ShowFinanceTerms例程\r\n10.2.2 ClearFinanceTerms例程\r\n10.3 将配置保存为报价\r\n10.3.1 已保存的报价和订单表\r\n10.3.2 更新事务中的数据\r\n10.3.3 保存报仂\r\n10.4 未引用脚本的页面\r\n10.4.1 避免使用TabStrip和MultiPage控件\r\n10.4.2 处理缺少AutoPostBack的情况\r\n10.4.3 替换TreeView控件\r\n10.4.4 在缺少setOptionButtons函数的情况下执行管理功能\r\n10.4.5 在缺少mainWindowPage函数的情况下执行管理功能\r\n10.4.6 在缺少Close按钮的情况下执行管理功能\r\n10.5 小结\r\n\r\n第11章 登录和注册页面\r\n\r\n11.1 Web站点用户和身份标识\r\n11.1.1 身份验证\r\n11.1.2 授权\r\n11.1.3 角色扮演(Impersonation)\r\n11.1.4 ASP.NET身份验证方法\r\n11.2 WroxCars的登录和注册过程\r\n11.2.1 根文件夹web.config文件\r\n11.2.2 “secure”子文件夹的web.config文件\r\n11.2.3 针对缺少Cookie的客户端的身份验证\r\n11.2.4 逐步处理\r\n11.2.5 为什么使用匿名用户ID\r\n11.2.6 为什么使用综合的登录和注册页面\r\n11.3 登录和注册页面\r\n11.3.1 HTML页面声明\r\n11.3.2 客户端脚本函数\r\n11.3.3 ASP.NET服务器端代码\r\n11.4 小结\r\n\r\n第12章 报价和订单\r\n\r\n12.1 将列表控件与关联的数据进行绑定\r\n12.1,1 绑定到单独的数据源\r\n12.1.2 绑定嵌套的列表控件\r\n12.1.3 绑定到层次化数据\r\n12.2 构建MyCars页面\r\n12.2.1 MyCars页面的HTML代码\r\n12.2.2 MyCars页面的代码\r\n12.3 小结
利用ASP.NET可以方便地为Web应用程序创建交互式的、直观的用户界面和有吸引力的、 激动人心的网页。通过将基于服务器的回送体系结构和.NET Framework中提供的大量服务器控件相结合,开发人员可以像利用VB、Delphi和C++等语言开发传统可执行程序的事件驱动方式一样,快速地为网站和Web应用程序构建基于浏览器的用户界面。
ASP.NET是一种全新的方法,它与以前版本的ASP截然不同。很难全面地掌握其基本原 理,以及基于服务器的事件的工作方式(根据用户在页面中的操作来生成相应的事件)。然而, 创建ASP.NET页面,尤其是使用那些可用的或处于开发过程中的工具来创建页面,将比使用传统的ASP方法更加简单,并且可以减少错误的发生。
然而,在用户交互过程中完全使用基于服务器的方案也有其自身的缺点。在一个长时间的等待过程中,或者在网络低速连接时,每当页面的内容需要改变时,就需要连接服务器,这将 会干扰应用程序的工作,或者降低网站预期的响应灵敏度。
ASP.NET的设计思路是,生成一种基于服务器的机制,通过向服务器回送信息来生成和更 新页面;但是仍然有部分服务器控件(如常见的Validation(验证)控件)通过JScript脚本实现客户端的交互性能,并将其发送到客户端运行。开发人员完全可以将该功能添加到其他控件中,事实上,这种功能目前已经成为大多数网站和Web应用程序的一种标准。
本书主要内容
根据本书的书名和前言,读者完全可以推测出本书的目标是探讨如何开发由ASP.NET驱动的用户界面。具体而言,将讨论和研究主要用于创建网站和网页的各种技巧和方法。这些方法具有如下特性:
●直观、易于使用
●富有吸引力,功能全面
●在合适的地方提供了交互性能
●基于真实场景
●完成一组预定义的设计要求
●具有娱乐性,令人难忘,令用户满意
我们所创建的页面大部分是一个完整应用程序中的一部分内容(对客户购买模式进行了一 些优化),这些应用程序的确构成了网站或Web应用程序的基础。现在,Web应用程序已经成 为WWW(World Wide Web,万维网)的一个基本组成成分。本书将创建一个Web站点,在该站 点中,用户可以从著名的Wrox汽车公司(Wrox Car Company)选择、定制和购买一辆新车。
为了创建该网站,首先将着眼于需求分析和设计的步骤(尽管不是很详尽),然后,设计和勾勒网站的概貌。然而,尽管这是一种自然的开始创建站点的方式,但这一步通常被简化,甚至被省略,从而使得网站的开发工作向着一个偶然的、不可预见的方向发展。当然,这样做并非完全错误,但这样的确增加了开发和维护的难度。即使采用最简单的“启动计划”也可以减少开发和维护周期,同时还可以避免许多由“没有计划”而引发的常见故障。
一旦完成了基本设计,接下来就要学习组成一个完整网站所需的各种资源的开发。当然,网站中经常会出现重复,因此,为了使本书尽可能地发挥其作用,我们冒昧地尝试并涵盖尽可能多的有用主题。本书将介绍以下一些内容:
●一个简化整个网站浏览的中央主页(Home页面)
●显示后台数据库所提供的可用产品的数据
●由服务器端代码或客户端代码(或两者同时)驱动的交互内容
●在运行时创建图像,以及可以为站点赋予生命的动画
●识别用户并提供可选的个性化的“登录”特性
●在线订单工具,可以提供订单跟踪、利用电子邮件发送状态报告等功能
●目前可供使用或正在开发的一些ASP.NET开发工具
此外,我们并没有过多地关心后台数据处理的详细细节,而仅仅关心网站运行所需的内容。在清华大学出版社引进并出版的《ASP.NET分布式数据应用程序高级编程》书中,讨论了后台的整个过程、n层体系结构的实现,和组件化设计。然而,该书尽可能地解决客户端程序可能 出现的各种复杂情况,以便更好地关注数据处理问题。
由于本书篇幅所限,因此本书将重点转向了用户界面,并使用非常简单的数据访问技术。当然,这并不意味着我们没有“恰当地”做这件事,而仅仅表示您没有看到所有.NET数据访问 类的工作原理的详细讨论,或者对捕获和报告并发错误的长篇介绍。
本书中除了一些演示特定原理或展示语法的简单、抽象的小程序段外,所列出的所有 ASP.NET代码都可以在VB.NET和C#中使用。书中所有代码几乎全部采用VB.NET编写,但 尽量避免任何与特定语言相关的特性。因此,如果愿意采用另一种语言,任何有一定能力的开 发人员都可以将这些代码转换成其他语言的代码。由于VB.NET和C#实现指定特性的方法有着 显著的区别,因此,本书中也列出了C#版程序。此外,客户端代码采用JavaScript/JScript编写。
本书中的源代码可以从http://www.wrox.com/网站下载。此外,还可以在我们的服务器上 在线运行许多示例。详情请参阅http://www.daveandal.com/books/7868/。
注意:
如果读者使用ASP 2.0或3.0,并且已经阅读过Wrox的“ASP Webmaster”系列书籍,读者将发现,在某种程度上,本书在所述专题的选择和讲述专题的方式上与“ASP Webmaster”系列书籍类似。但是,本书介绍的是ASP.NET,因此其范围和基础实现有很多不同之处。
本书读者对象
显然,ASP.NET和相应的.NET Framework类库要比在ASP 3.0或者更早版本中所使用的技 术(或者,事实上也包括PHP和JSP等其他环境)复杂得多。因此,每一本介绍ASP.NET的书 籍都不可能既包含关于ASP.NET的基础介绍或简短教程,又同时讲述更高级的内容。而后者 将是本书的核心内容。
这里需要提醒您注意,从您的观点看这是一件好事,因为您并不想为已经熟悉的主题的内 容浪费时间和金钱。这就意味着,如果您想成功使用本书,那么您需要熟悉ASP.NET,并在一 定程度上熟悉.NET Framework类。这里假设您已经安装,并正在使用ASP.NET创建页面,当 然也可能使用文本编辑器、Visual Studio.NET,或其他开发工具来创建页面。
此外,还假设您对使用数据库驱动网站有一定的了解。我们将解释书中使用的数据访问代 码,代码的工作原理,并讨论在适当时机可以采用的替代方法。但是,本书中并不讲述建立和 管理数据库的基本技巧。
注意事项
●本书不是针对任何特定技术领域的资料性参考书
●本书不是针对任何技术的学术论文
●本书并不特别讲述任何与乇ASP.NET相关的硬件性能或软件配置
●本书并不特别针对SQL编程、服务器优化,或者数据访问理论
●本书的读者对象并不是系统或数据库管理员,而是针对开发人员主要特性
●本书提供了可达到使用目标但不会提高复杂性的实用方法
●本书是有关ASP.NET的众多有用、功能强大的面向界面特性的指南
●本书探讨了如何设计并构建交互式网站
●本书简要介绍了众多的辅助技术,如绘图和电子邮件功能
●本书展示了如何利用ASP.NET方便快捷地创建大型网站
●本书资料丰富、实用,且行文风趣
学习本书的条件
当您的经验与知识水平满足了上一节的基本要求后,您只需再具备以下条件:
●具备一个开发环境。至少必须具备您喜欢的文本编辑器,可以是Visual Studio.NET、Microsoft ASP.NET Web Matrix,或者其他任何合适的第三方开发工具;
●在可以访问的服务器端已经安装和配置了IIS(Internet lnformation Server,Internet信息服务器),和.NET Framework。如果选择使用了Matrix,那么还可以利用它内置的Web服务器。我们还推荐您安装包含各种参考资料的.NETSDK的完全版本,这样即使没有使用Visual Studio.NET,也可以方便地查询相关的条目。
●安装配置数据库,如Microsoft SQL Server或MSDE,当然还可以使用其他类型的SQL数据库系统——甚至可使用桌面数据库(如Microsoft Access)——只需确保已提供可以通过ASP.NET访问的.NET Data Provider。
为了开发和试验,可以在同一台机器上运行数据库、IlS、.NET,以及用户选择的开发环境。 这样可以简化调试过程。
用户支持和反馈
我们一贯重视读者的意见,并想知道每位读者对本书的看法,包括读者喜欢和不喜欢的内 容, 以及读者希望我们下一次完善的地方。 您可以通过发送电子邮件(地址为 feedback@wrox.com)来向我们反馈意见。请确保在反馈信息中提到本书的ISBN和书名。
源代码和更新
本书所有代码都可以从Wrox公司网站(http://www.wrox.com)下载。当访问该站点时,通过Search工具或书名列表,可以方便地定位需要的书目。然后,单击本书详细信息页面中的 Download Code链接,就可以下载所有的源代码。
从我们的站点上下载的可用文件都是使用WinZip压缩过的文档。把附件保存到本地硬盘 上的文件夹中后,需要使用一个解压缩程序(例如WinZip或PKUnzip)来解压缩文件。在解压缩 文件时,通常将代码解压缩到每一章所在的文件夹中。在解压缩的过程中,应确保解压缩程序 已经选中Extractto(或对等选项)选项列表下的Use folder names。
也可以在作者自己的网站联机运行本书中的代码,该站点的地址为:http://www.alanddave.com/books/7868。
勘误表
我们已经尽最大努力确保本书中的文本和代码没有错误,但是错误仍然在所难免。如果您 发现本书存在错误,例如拼写错误或不正确的代码段,请反馈信息给我们,我们将不胜感激。 勘误表的发送可以节约其他读者学习本书的时间,而且能够帮助我们提供更高质量的信息。请 将您的反馈信息以电子邮件的形式发送到support@wrox.com,它们将被检查,如果正确,将被 粘贴到本书的勘误页面上,或者在本书的后续版本中使用。
要在我们的站点上找到勘误表,请访问http://www.wrox.com/,并通过Search工具或者书 名列表轻松定位本书页面。然后单击Book Errata链接即可,该链接位于本书的详细页面中。在 这个页面中,您可以看到所有已经由编辑检查并提交的勘误内容。通过单击SubmitErrata链接, 您也可以通知我们您已经发现的勘误内容。
技术支持
如果您希望直接询问本书中的问题,可以发送电子邮件到support@wrox.com。一封典型的 电子邮件应包括下面的内容:
●在主题栏中必须有本书的书名、ISBN的后4位数字(本书的对应号码为:7868),和问题所在的页码。
●正文部分应包括读者的姓名、联系方式,和问题。
我们将不返回无用邮件,因为仅仅需要有用的详细资料,以便可节约您和我们的时间。当 您发送一条电子邮件消息时,它将经过下面一系列的支持:
●客户支持——首先,您的信息将被递送到客户支持人员手中,并由他们阅读。对于一些被频繁提到的问题将被归档,并将立即回答有关本书或者Web站点的任何常见问题。
●编辑支持——接着,一些有深度的问题将被送到对本书负责的技术编辑手中,他们在程序设计语言或者特定的产品上有着丰富的经验,能够回答相关主题的详细技术问题。问题一旦得到解决,编辑会及时将勘误表发送到我们的Web站点上。
●作者支持——最后,如果编辑不能回答您的问题(这种情况很少发生),他们将请求本书的作者。我们将尽量保护作者免受干扰,以便不影响其写作。然而,我们也非常高兴转寄给他们一些特殊的问题。所有Wrox公司的作者都为他们的书提供技术支持。作为回应,他们将发送电子邮件给用户和编辑,进而使所有的读者受益。
注意:
Wrox公司的支持过程仅仅对那些与我们出版的书目内容直接相关的问题提供支持,对于超 出常规书目支持的问题,您可以从http://p2p.wrox.com/论坛中的公共列表中获得支持信息。
p2p.wrox.com站点
为了便于作者和其他人讨论,特将编程人员加入到P2P站点的邮件列表中,而且我们独特 的系统将programmer to programmerTM(由程序员为程序员而著)的编程理念与邮件列表、论坛、 新闻组,以及所有其他服务内容(一对一的邮件支持系统除外)相联系。如果您向P2P发送一个 问题,应该相信它一定会被登录邮件列表的Wrox公司作者和其他相关专家所检查到。无论您 是在阅读本书,还是在开发自己的应用程序,都可以在p2p.wrox.com站点中找到许多对自己有 所帮助的邮件列表。
按照下面的步骤可以预订一个邮件列表:
(1)登录http://p2p.wrox.com/站点,并从左边的菜单栏选择一个适当的类别。
(2)单击您希望加入的邮件列表。
(3)按照说明订阅并填写自己的邮件地址和密码。
(4)回复您收到的确认邮件。
(5)使用预订管理程序加入更多的邮件列表并设置自己的邮件首选项。
无封面