编程珠玑Dotnet1.docx

上传人:b****7 文档编号:9970051 上传时间:2023-02-07 格式:DOCX 页数:35 大小:895.76KB
下载 相关 举报
编程珠玑Dotnet1.docx_第1页
第1页 / 共35页
编程珠玑Dotnet1.docx_第2页
第2页 / 共35页
编程珠玑Dotnet1.docx_第3页
第3页 / 共35页
编程珠玑Dotnet1.docx_第4页
第4页 / 共35页
编程珠玑Dotnet1.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

编程珠玑Dotnet1.docx

《编程珠玑Dotnet1.docx》由会员分享,可在线阅读,更多相关《编程珠玑Dotnet1.docx(35页珍藏版)》请在冰豆网上搜索。

编程珠玑Dotnet1.docx

编程珠玑Dotnet1

10

第章

窍门程序回顾

在变化越来越快的世界中,总是存在窍门程序。

现在,它们是开发人员的一种聪明、前沿的创造。

将来的某一天,它们有可能成为主流代码或最佳实践方式,并集成到产品或过程中。

窍门程序的成功标志是,有一天它变成了一种标准。

本章主要介绍已成功的窍门程序。

我们将回顾ASP.NETv1.1中已得到广泛认可的一组窍门程序。

它们非常有效,Microsoft已在ASP.NETv2.0中添加了对它们的支持。

本章并不是重新编写已发明的窍门程序,而主要探讨先驱和他们的工作,正是他们出色的工作使Microsoft在ASP.NETv2.0中添加了对窍门程序的支持。

对于已转而使用ASP.NET2.0的开发人员来说,要学习的是如何将这些窍门程序集成到.NETFramework中和相关的VisualStudio2005支持。

了解以前的窍门程序如何影响ASP.NET的当前版本,将使我们更加欣赏窍门程序,并激励我们开发出能正面影响ASP.NET未来版本的窍门程序。

1.1由ASP.NET2.0替代的向导窍门程序

向导是引导用户完成某个过程的用户界面工具。

这里讨论的是添加到应用程序中的向导。

开发人员已使用它们多年,例如安装程序,把复杂的操作简化为一系列步骤的工具等。

它们传统上是客户端桌面应用程序的一个标准部分,但在Web应用程序中以窍门程序的面目出现。

1.1.1ASP.NET向导先驱

在早期的ASP.NETv1.1中,JohnPeterson编写的向导窍门程序是作为一个范例在ASP(3.0的实现更新而来的。

在ASP.NET2.0向导宣布支持它后,TomBlanchard在SimulatingtheASP.NET2.0WizardControlwithASP.NET1.x”。

一些人还使用另一个已有的解决方案:

UserInterfaceProcess(UIP)ApplicationBlock上的WizardNavigator,它是由MicrosoftPatternsandPracticesGroup在dnpag2/html/cabctp.asp上创建的。

提示:

Microsoft的在线链接停了许多,但搜索MSDNArchitectureCenter的PatternsandPractices资源页面,仍能找到UIApplicationBlock。

1.1.2ASP.NETv2.0中的向导

向导在ASP.NET2.0中不再是一个窍门程序,它们很容易使用,在VisualStudio2005上得到了很好的支持。

下一节将介绍如何实现向导。

1.1.3实现ASP.NET2.0向导

ASP.NET2.0向导实现为控件。

要使用它们,只需把一个新的向导控件添加到可视化设计器中,设置其属性即可。

本节描述如何通过一个范例菜单选择应用程序来实现ASP.NET2.0向导。

在这个过程中要进行许多选择,向导将根据输入参数管理导航。

下面的步骤说明了如何创建范例应用程序:

(1)创建一个新的Web项目。

为此,选择File|New|WebSite,再选择ASP.NETWebSite模板,把目录位置改为WizardDemo,如图1-1所示。

图1-1

(2)单击OK按钮,VisualStudio2005就会创建一个新项目,如图1-2所示。

(3)如果当前在HTML视图上,如图1-2所示,就单击编辑器左下角的Design链接,进入设计视图。

图1-2

(4)在设计视图中,找到工具箱,它位于IDE的左边。

把鼠标指针停放在Toolbox标签上,就可以打开它。

单击工具箱的Standard区域,选择Wizard控件。

把一个Wizard控件拖放到窗体上,如图1-3所示。

图1-3

(5)选择View|PropertiesWindow,显示Properties窗口。

在这个窗口中,把HeaderText属性设置为MenuSelector。

(6)扩展Wizard控件,使其大小大约为400×200。

(7)Wizard控件在第一次添加到Web窗体上时,显示了两个链接,分别称为Step1和Step2。

选择Wizard控件中的Step1。

(8)在Wizard控件中选择编辑区域,输入“WhatisyourEatingPreference?

”。

(9)从工具箱中把一个RadioButtonList控件拖放到Wizard控件的编辑区域,在ActionList上选择EditItems。

在ListItemCollection编辑器上给两个新项的Text属性添加MeatEater和Vegetarian项。

图1-4显示了第5~9步的结果。

图1-4

(10)在Wizard控件中选择Step2。

(11)在编辑区域输入“PleaseSelectMainCourse:

”。

(12)把一个RadioButtonList控件从工具箱拖放到Wizard控件的编辑区域。

选择ActionList中的EditItems,在ListItemCollection编辑器中为三个新项的Text属性添加Chicken、Fish和Steak项。

图1-5显示了第10~12步的结果。

图1-5

(13)在WizardTasks列表中单击Add/RemoveWizardSteps,给Wizard控件添加Step3。

(14)选择刚才添加到Wizard控件中的新链接Step3。

(15)在编辑区域中输入“PleaseSelectMainCourse:

”。

(16)把一个RadioButtonList控件从工具箱拖放到Wizard控件的编辑区域。

选择ActionList中的EditItems,在ListItemCollection编辑器中为三个新项的Text属性添加Bread、Salad和VeggieTray项。

图1-6显示了第13~16步的结果。

图1-6

(17)在WizardTasks列表中单击Add/RemoveWizardSteps,给Wizard控件添加Step4。

(18)选择刚才添加到Wizard控件中的新链接Step4。

(19)在编辑区域中输入“PleaseSelectBeverage:

”。

(20)把一个RadioButtonList控件从工具箱拖放到Wizard控件的编辑区域。

选择ActionList中的EditItems,在ListItemCollection编辑器中为三个新项的Text属性添加Coffee、Water和Wine项。

图1-7显示了第17~20步的结果。

图1-7

这将为包含多个步骤的向导创建HTML。

程序清单1-1列出了这个页面的HTML,其中包含了本节后面进行的修改。

程序清单1-1中的HTML是我们在执行第1~20步时,由VisualStudio2005自动生成的。

在VisualStudio2005编辑器的底部选择HTML选项卡,从设计视图切换到HTML视图。

此时,将看到程序清单1-1中的代码。

程序清单1-1包含多个步骤的ASP.NETv2.0Wizard控件

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"

Inherits="_Default"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"http:

//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

//www.w3.org/1999/xhtml">

WizardDemo

WizardID="Wizard1"runat="server"

ActiveStepIndex="0"HeaderText="MenuSelector"

Height="200px"Width="400px"

OnFinishButtonClick="Wizard1_FinishButtonClick"

OnNextButtonClick="Wizard1_NextButtonClick">

WizardSteprunat="server"Title="Step1">

Whatisyoureatingpreference?



RadioButtonListID="RadioButtonList1"

runat="server">

ListItem>MeatEater

ListItem>

ListItem>Vegetarian

ListItem>

RadioButtonList>

WizardStep>

WizardSteprunat="server"Title="Step2">

Pleaseselectmaincourse:



RadioButtonListID="RadioButtonList2"

runat="server">

ListItem>Chicken

ListItem>

ListItem>Fish

ListItem>

ListItem>Steak

ListItem>

RadioButtonList>

WizardStep>

WizardSteprunat="server"Title="Step3">

Pleaseselectmaincourse:



RadioButtonListID="RadioButtonList3"

runat="server">

ListItem>Bread

ListItem>

ListItem>Salad

ListItem>

ListItem>VeggieTray

ListItem>

RadioButtonList>

WizardStep>

WizardSteprunat="server"Title="Step4">

Pleaseselectbeverage:



RadioButtonListID="RadioButtonList4"

runat="server">

ListItem>Coffee

ListItem>

ListItem>Water

ListItem>

ListItem>Wine

ListItem>

RadioButtonList>

WizardStep>

Wizard>

从程序清单1-1中的步骤和图1-8可以看出,用户要么是一位荤食者,要么是一位素食者。

他们应只看到对应其选项的菜单项。

图1-8

为了指定不同的菜单,Wizard控件必须根据用户在Step1中做出的选择,导航到不同的步骤。

ASP.NET的Wizard控件支持事件,我们将使用事件根据用户的饮食喜好来确保显示相应的步骤。

程序清单1-2说明,在用户单击Next按钮时,如何正确导航。

单击Properties窗口上的闪电图标,并双击NextButtonClick事件,就会生成事件处理程序框架,该处理程序的默认名称是Wizard1_NextButtonClick。

在Wizard1_NextButtonClick事件处理程序中输入算法,如程序清单1-2所示。

程序清单1-2修改向导的顺序进程

protectedvoidWizard1_NextButtonClick(

objectsender,WizardNavigationEventArgse)

{

if(Wizard1.ActiveStepIndex==0)

{

if(RadioButtonList1.SelectedValue=="Vegetarian")

{

Wizard1.ActiveStepIndex=2;

}

}

if(Wizard1.ActiveStepIndex==1)

{

Wizard1.ActiveStepIndex=3;

}

}

捕获了NextButtonClick事件后,如程序清单1-2所示,就可以控制Wizard控件的导航顺序。

这个事件在单击Next按钮时,在当前页面的环境下调用。

因此,首先检查ActiveStepIndex,确定当前页面,该页面用一个基于0的整数表示。

所有的步骤控件都可以在回送过程中访问,所以很容易获得它们的值。

在这里,如果用户的饮食喜好是Vegetarian,代码就把ActiveStepIndex设置为Step3页面,即索引2。

如果用户的饮食喜好是MeatEater,Wizard控件一般将导航到索引为1的Step2上。

此时,单击Next按钮,会使用户进入索引为3的Step4上,选择一种饮料。

导航到Step3上的素食者在单击Next按钮后,一般会进入Step4。

Wizard控件到达末尾后,Next按钮将被Finish按钮替代。

此时可以捕获Finish按钮的事件,该事件在单击Finish按钮时执行,如程序清单1-3所示。

程序清单1-3处理Finish按钮事件

protectedvoidWizard1_FinishButtonClick(

objectsender,WizardNavigationEventArgse)

{

if(RadioButtonList1.SelectedValue=="Vegetarian")

{

Response.Write(

"Yourmealwillbe"+

RadioButtonList3.SelectedValue+

"and"+

RadioButtonList4.SelectedValue);

}

else

{

Response.Write(

"Yourmealwillbe"+

RadioButtonList2.SelectedValue+

"and"+

RadioButtonList4.SelectedValue);

}

}

在程序清单1-3中,我们主要感兴趣的是,用户的饮食喜好是MeatEater,还是Vegetarian,以便从相应的控件中提取值。

代码通过Response.Write,根据用户在运行向导时是选择MeatEater还是Vegetarian,输出选中的菜单项。

在添加步骤、处理事件和修改属性的过程中,可以看出ASP.NETv2.0的Wizard控件有多么复杂。

这是一个非常有用的窍门程序,目前已转化为一个完整的产品特性。

1.2MasterPage:

以前和现在

MasterPage可以为网站的多个页面开发出具有统一外观和操作方式的可视化模板。

在ASP.NETv1.1中,开发人员需要使用几种不同的技术完成类似的任务,包括继承自一个公共的页面基类的用户控件和一组使用模板的MasterPage。

本节将介绍如何在ASP.NETv1.1中实现MasterPage模板窍门程序的资源,接着描述如何把它们实现为ASP.NETv2.0中的一个主要特性。

1.2.1ASP.NETv1.1中的MasterPage模板

在ASP.NETv1.1中,与ASP.NETv2.0的MasterPage最接近的技术是模板管理技术。

PaulWilson在上撰写了几篇有关页面模板的文章。

2003年10月,他给ASP联盟发表了“PageTemplates:

Introduction”一文(PaulWilson/Articles/?

id=14),描述了用户控件和页面继承技术。

而比较有趣的是他给ASP联盟发表的文章“MasterPages:

Introduction”(Articles/?

id=13)。

对于许多开发人员来说,这是ASP.NETv2.0中的MasterPage的第一次亮相。

PaulWilson的文章介绍了如何用ASP.NETv1.1实现相同的功能。

在ASP.NETv1.1中实现模板化有其他可靠的方式。

在PhilippSumi的CodeProject文章“AComponent-BasedTemplateEngineforASP.NET”(controls.asp)中,展示了在ASP.NETv1.x中使用MasterPage模板的另一种方法。

还有其他例子,但PaulWilson和PhilippSumi的文章是可以在ASP.NETv1.1中使用的可靠参考。

1.2.2ASP.NETv2.0中的MasterPage

在ASP.NETv2.0中,MasterPage从一个窍门程序成长为一个重要特性。

它们内置于ASP.NET中,拥有新的页面指令、占位符和控件,可以为应用程序或网站创建出统一的外观和操作方式。

另外,它们还在VisualStudio2005中获得了良好的支持。

1.2.3实现MasterPage

在ASP.NETv2.0中,MasterPage实现为一个Web页面,其中包含内容页面可以使用的默认外观和操作方式。

多个内容页面只需提供合并到MasterPage中的内容标记,即可使用这个MasterPage的统一外观和操作方式。

本节的示例将使用VS2005创建一个MasterPage和简单的内容页面。

首先,创建一个新的Web项目,删除自动创建的Default.aspx页面。

后面在创建使用MasterPage的内容页面时,将再次创建Default.aspx。

(1)要创建MasterPage,在SolutionExplorer中右击Web项目,选择AddNewItem,再选择MasterPage,给它指定名称Company.master,然后单击OK按钮。

这将创建一个新的MasterPage。

(2)如果MasterPage在HTML视图中,就单击编辑器左下角的Design按钮,把它切换到设计视图。

选择Layout|InsertTable,给Company.master添加一个新表。

(3)在InsertTable对话框中,选择Template,再从下拉列表中选择“Header,footerandside”,如图1-9所示。

(4)表添加到页面上后,选择最上面一行的单元格,输入“MyCompanyHeader”,选择第二行的第一个单元格,输入“MenuGoesHere”,再选择第三行(最后一行)的单元格,输入“Copyright(C)2006MyCompany,AllRightsReserved”。

(5)第一次创建MasterPage时,它会自动添加一个ContentPlaceHolder控件。

Company.master也是如此。

把ContentPlaceHolder控件拖放到刚才插入Company.master的表中第二行的第二个单元格中。

结果如图1-10所示。

图1-9

图1-10

创建和修改Company.master后,就可以单击编辑器左下角的HTML按钮,查看自动生成的HTML代码了。

程序清单1-4列出了为Company.master进行上述修改后的HTML。

程序清单1-4格式化定制页面元素的MasterPage:

Company.master

<%@MasterLanguage="C#"AutoEventWireup="true"

CodeFile="Company.master.cs"Inherits="Company"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"http:

//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

//www.w3.org/1999/xhtml">

MyCompany

style="width:

100%;height:

100%">

200px">

MyCompanyHeader

200px">

MenuGoesHere

contentplaceholderid="ContentPlaceHolder1"runat="server">

contentplaceholder>

200px">

Copyright(C)2006MyCompany,AllRightsReserved

在程序清单1-4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1