一、ASP.NET创建网站的两种方式:
文件系统:VS2005新增的模式,不需要安装IIS,使用内置的"ASP.NET程序开发服务器",并且随机给网站分配一个Port。 本地IIS:传统的Web开发模式,使用操作系统的IIS服务器。 二、Web开发环境: 1、 解决方案的设置:在VS2005中当建立一个网站的时候会发现只有网站项目,不像VS2003中会自动出现一个"解决方案",除非你添加第二个项目的时候“解决方案”才会显示出来。 用户可以从<工具>-<选项>-<项目和解决方案>中将“总是显示解决方案”打勾,即可将解决方案显示出来。 2.、对单页进行编译:在VS2003中对网站中某一页面的小小改动也要对整个网站进行整体编译,在VS2005中可以针对某一页进行编译. 在相应的页面上右击选择<生成页>即可。 3、开发界面模式:在VS2005中承延了VS2003中的两种开发界面“设计模式”和“代码模式(源文件模式)”。系统默认的是“源文件模式”。 <工具>-<选项>-<HTML设计器>-<起始页位置>中选择地“设计视图”。 4、页面布局的设置:在VS2003中Web页面的布局默认是GridLayout绝对定位模式,开发时候给人一种很不舒服的感觉,在VS2005中把默认的Web页的布局设为FlowLayout相对定位模式,如果你想把页面默认布局设为绝对定位的话,进行如下操作: <工具>-<选项>-<HTML设计器>-<CSS定位>中选中“绝对定位” 5、显示不可见的元素:有一些不可见的元素如<span><div>等,默认不会在设计视图中显示出来。 <工具>-<选项>-<HTML设计器>-<显示>中选中“显示不可见元素的详细信息”。 6、行号设置:<工具>-<选项>-<文本编辑器>-<所有语言>将“行号”选择。 7、以文件系统开发时把端口号固定:在以文件系统开发时,系统自动生成的端口号是随机的,这给我们运行程序带来了困难,如何将端口号固定下来呢? a. <工具>-<外部工具>-<添加>,输入下列设置 标题:MyWebServer 命令: C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/WebDev.WebServer.EXE 参数: /port:8080 /path:$(ProjectDir) /vpath:"/websit2" b.点击 <工具>-<MyWebServer>启动Web服务器 c.右击项目, 选择<启动选项>-<使用自定义服务器>在后面的输入框中输入"http://localhost/8080" d.运行项目,这样就可以在固定的端口下运行项目了。 8、代码段: 用过JCreator的朋友可能感觉里面的代码模板实在是太好用了,有人问VS中有没有这样的功能。当初在VS2003的时候我也曾为此遗憾过,但到了VS2005中我们兴奋地发现“代码段”就是我们要找的那种功能。 右击选择“插入代码段”,或者按Ctrl+K+X就会列出我们要找的代码段,当然还可以去网上下载更多的代码段,或自己扩充代码段。 9、代码的重构: 代码重构不是代码的重写,它是对现有的代码进行重新组织或调整。如:把某段代码提取出来放在一个独立的方法中,重命名某个方法及其引用者,将方法中的局部变量变为实参的参数等等。 选中相应的代码段,右击选择“重构”再选择要应的重构方式。 10、同一项目中使用VB.Net和C#同进开发: 在VS2003中对于一个项目,只能使用一种开发语言进行开发。到了VS2005中我们可以对一个项目使用不同的开发语言,但这并不意味着在一个.cs类文件中可以混合使用各种的开发语言。 要在一个项目中实现不同的开发语言共存 a. 需要在App_Code文件夹中建立不同的子文件夹(如文件夹cs和文件夹vb),把不同语言的开发代码分别放在不同的子文件夹中. b.在配置文件中进行如下配置: <compilation debug="true"> <codeSubDirectories> <add directoryName="cs"></add> <add directoryName="vb"></add> </codeSubDirectories> </compilation> c.在相应的文件夹中用不同的开发语言编写代码。 这样就可以在外面使用C#类或VB.Net类了 三、安装布署: 1、复制网站 在VS2003中的xcopy给开发人员的布署带来了很大的方便,但仍有不足之处。在VS2003中编译后的.dll文件是程序运行的文件,也为源代码保护提供了方便,但正因为运行的是.dll文件,所以,当源代码发生改变后必须要编译整个网站生成新的.dll文件,并把编辑出的.dll文件和新的.aspx文件Copy到服务器上才可以,这给网站的维护带来了很大的不便。 在VS2005中提供了“复制网站”的工具,可以把整个程序发布到本地或远程的IIS上,另外它还带有同步处理的功能,如果网站发生改变,你只需要同步处理一下就可以了。 在网站项目上右击,选择<复制网站>-<连接>-<本地IIS>-<创建新的Web应用程序>,将“源网站”的所有文件同步复制到“远程网站”上去就可以了,程序在第一次运行的时候会自动编译网站的.aspx和.cs文件。 2、预编译: “复制网站”可以实现简单快速的布署,有心的朋友可能会发现这种布署方式会把程序源文件(.cs)文件一起发布到服务器上,并且找不到编译出的.dll文件,因为在“复制网站”的布署方式中,会在第一次运行的时候动态编译.aspx和.cs文件生成中间语言元数据,然后再生成页面对象。那VS2005如何做到源代码的保护呢?这时会有很多朋友怀念VS2003的编译模型,在第一次编译的时候就生成中间语言元数据,在VS2003中只需要把生成的.dll文件和.aspx文件布署就可以了,如此实现了对源代码的保护。 其实不用担心,VS2005是不会犯这种弱智的Bug。VS2005采用预编译的方式来实现源代码保护的,并且应用程序在第一次动行的时候省去一次编译的,达到更快的效果。 在VS2005的Dos窗口下运行 aspnet_compiler -v webs "c:/temp/newwebs" -v 后的第一个参数(webs):是要预编译的虚拟目录 -v后的第二个参数("c:/temp/newwebs") :是预编译后结果所存放的目标位置 预编译完成后,就可以在目标位置中查看编译结果,发现里面没有.cs文件,只剩下aspx文件,并且多出了一个bin文件夹。当你打开aspx文件后会发现它也被编译了,无法查看和修改。可见预编译比VS2003中的编译更深入。 最后你就把编译的结果放Copy到服务器的虚拟目录中就可以了。 3、发布网站: 预编译效果不错,担操作有点复杂,其实VS2005提供了预编译的简单操作,右击Web项目,选择“发布网站”按照向导进行操作即可,这样就会像复制网站一样简单,可以轻松实现预编译,并把预编译的结果发布到Web服务器上去。 四、CodeBehind模式的改进: 在VS2003中一个耀眼的亮点就是CodeBehind模式。在VS2005中又改进了VS2003的CodeBehind模式。在VS2003中所有在.aspx中所加入的控件都在对应的.cs文件中以成员变量的形式列出来,另外VS2003中会在对应的.cs文件中产生好多窗体自动生成的代码,对于这些自动生成的东西,对于初学者来说会感到一些恐慌,而对于熟练的程序员来说,是了解与控制页面运作的好的入口点。 在VS2005中的CodeBehind模式中,.cs文件中不再有太多的窗体自动生成的代码,这样使.cs文件更清晰,对初学者来说相对简单了。但对于熟悉面向对象的程序员来说,这里的页面类却有点不伦不类--为什么没有成员变量的声明却能够使用成员变量呢?而且要想对页面初始化进一步控制的话仿佛还要回归到VS2003的相关事件和方法中去寻找。尽管好多资料对这种新的CodeBehind模式进行推祟,但我感觉这种模式并利于初学者对页面类的理解。 1、partial关键字:partial类是VS2005对语法的一次重大改进,克服了过去“同一个类的成员必须写在同一个类的花括号内”的古老作法。它在类的定义的基础上,实现了写法上的“松散化”。 partial类可以重名,在编译的时候会把同名的partial类当成一个类来看待,这样我们就可以把一些复杂的类交给不同的程序员来编写,而省去了后期的代码合成的过程。 正是有了partial类,我的CodeBehind模式才会变得发此简单。大家试一下,把.cs文件中页面的类的partial关键字删掉,会出现什么情况?--会出错。为什么呢?因为在编译时.aspx文件和.aspx.cs两个文件会分别作为两个partial类看待,如果你把一个类的partial 关键字去掉的话当然会出现重名类了。现在你应当知道新的CodeBehind模式中的.cs文件为什么会如此简洁了吧?因为所有自动生成的内容全都封装在aspx这个partial类里了。当然这个.aspx文件的partial类可真的不太像一个传统意义上的类,但没办法,它确实作为类的身份进行运行。 2、Page指示词的变化:在VS2003中Page指示词中有一个属性"CodeBehind=...." ,但到了VS2005却变为"CodeFile=......" 五、数据库的注册与连接: 1、注册数据库: 在ASP.NET2.0中提供许多新的功能,如验证与授权、WebPart、主体特征设置等,所有这些都依托数据库来实现,因此在使用这些新功能之前应当注册一下数据库 在VS2005的Dos窗口中,运行aspnet_regsql命令,会弹出一个向导对话框,可以根据提示信息,一步步完成数据库的注册。注册完成后,会在相应的数据库中产生11个表,这些表就是完成新功能所依托的数据表。 或直接在VS2005的Dos窗口中运行 aspnet_regsql -S ./sqlexpress -U sa -P Test -d mydb -A all 2、连接字符串的设置: 在VS2005中连接字符串的设置已不推荐写在<appSettings>配置节中,而是写在<connectionStrings>配置节中,而<appSettings>配置节中可以进行一些其它的配置。如下: <connectionStrings> <add name="conn" connectionString="server=./sqlexpress;database=mydb;uid=sa;pwd=123" /> </connectionStrings> 3、连接字符串的读取: string str = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["conn"].ToString(); Response.Write(str); 4、加密连接字符串: aspnet_regiis -pe "connectionStrings" -app "/webapp0831" -prov "RSAProtectedConfigurationProvider" -pe 要加密的配置节元素名称 -app 要加密的应用程序虚拟目录 -prov 选择哪种方式进行加密 5、解密连接字符串: aspnet_regiis -pd "connectionStrings" -app "/webapp0831" 六、交叉提交: 交叉提交的场景:在一个aspx页面中输入数据(如:用户注册),在提交到另一个页面后,把用户刚才填写的信息全部显示出来,让用户确认无误后再提交到数据库去。 在asp可以通过form表单的action来指定一下跳转页面,然后在新页面中可以取出数据来。到了asp.net1.1后,其页面模型与asp有些不同,aspx页面与其对应的aspx.cs文件共同形成一个页面对象,用户填写的表单数据也就成为了页面对象的成员,由于HTTP协议的无状态性,用户在另一个页面取得前一个页面的数据就要花费很大的精力。 在asp.net2.0中新增了交叉提交的功能,这对程序员来说可真是“及时雨”,下面看一下如何使用交叉提交: 在asp.net2.0环境中,每一个按钮多了一个新的属性:PostBackUrl。PostBackUrl代表的是用户把数据提交到那个页面的URL地址。 1.访问源页面控件的内容: 有两个页面:SourcePage.aspx和TargetPage.aspx //SourcePage.aspx 页面的HTML源代码如下:(请注意按钮的PostBackUrl属性) <form id="form1" runat="server"> <asp:TextBox ID="txt" runat="server" Style="position: static"></asp:TextBox> <asp:Button ID="Button1" runat="server" Style="position: static" Text="Button" OnClick="Button1_Click" PostBackUrl="TargetPage.aspx" /> </form> //TargetPage.aspx.cs页面的C#代码如下:(注意PreviousPage.FindControl方法) protected void Page_Load(object sender, EventArgs e) { TextBox tb = (TextBox)PreviousPage.FindControl("txt"); Response.Write(tb.Text); } 这样就可以在TargetPage.aspx页面取得SourcePage.aspx页面中的数据了。 2.使用@PreviousPageType,访问源页面中页面类的属性(Property)和方法(Method): 有两个页面:SourcePage.aspx和TargetPage.aspx //SourcePage.aspx页面的HTML源代码如下:(请注意按钮的PostBackUrl属性) <form id="form1" runat="server"> <asp:TextBox ID="txt" runat="server" Style="position: static"></asp:TextBox> <asp:Button ID="Button1" runat="server" Style="position: static" Text="Button" OnClick="Button1_Click" PostBackUrl="TargetPage.aspx" /> </form> //SourcePage.aspx 页面的C#源代码如下: public partial class SourcePage : System.Web.UI.Page { public string Name { get { return "GrayWorm"; } } public string show() { return "defafult12.show()"; } } //TargetPage.aspx页面的HTML源代码中加入如下的声明行: <%@ PreviousPageType VirtualPath="~/Default12.aspx" %> //TargetPage.aspx.cs页面的C#源代码如下: protected void Page_Load(object sender, EventArgs e) { Response.Write(PreviousPage.Name); Response.Write(PreviousPage.show()); } 3.使用@Reference,访问源页面中的内容 //SourcePage.aspx 页面的HTML源代码如下: (请注意按钮的PostBackUrl属性) <form id="form1" runat="server"> <asp:TextBox ID="txt" runat="server" Style="position: static"></asp:TextBox> <asp:Button ID="Button1" runat="server" Style="position: static" Text="Button" OnClick="Button1_Click" PostBackUrl="default13.aspx" /> </form> //SourcePage.aspx页面的C#源代码如下: public partial class SourcePage : System.Web.UI.Page { public string Name { get { return "GrayWorm"; } } public string show() { return "defafult12.show()"; } } //TargetPage.aspx页面的HTML源代码中,加入下面的声明行: <%@ Reference VirtualPath="~/Default12.aspx" %> //TargetPage.aspx.cs页面的C#源代码如下: if (PreviousPage != null) { if (IsCrossPagePostBack) { Default12 d = (Default12)PreviousPage; string s = ((TextBox)d.FindControl("txt")).Text; Response.Write(s); Response.Write(d.Name); Response.Write(d.show()); } } 七、客户端功能: 1.默认提交按钮与默认焦点设置: <form id="form1" runat="server" defaultbutton="Button1" defaultfocus="txt"> <asp:TextBox ID="txt" runat="server" ></asp:TextBox> <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> <asp:Button ID="Button2" runat="server" Text="Button" /> </form> defaultbutton属性:设置当前表单的默认提交按钮,当按回车键的时候默认触发该按钮的事件 defaultfocus属性:设置默认焦点的控件的id 2.设置Web窗体控件的客户的click事件: 在asp.net1.1中,web窗体控件属性中有一个OnClick事件,但这个OnClick事件调用的是aspx.cs后置类的服务器端的方法名称。而不是客户端JavaScript函数的名称。为了实现Web窗体控件能够调用到客户端的JavaScript函数,我们只好在Page_Load事件中给按钮对象的Attributes集合添加客户端代码,实在是麻烦又难以理解。 到了asp.net2.0中我们惊喜地发现了一个新事件--OnClientClick事件。这个事件就是Web窗体控件调用的客户端代码用到的事件,用起来就像HTML控件调用客户端代码一样。 <asp:Button ID="Button2" runat="server" Text="Button" OnClientClick="window.alert('hello world')" /> <asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="return showclientwindow()" /> <script language=javascript> function showclientwindow() { return window.confirm("Are you ready?"); } </script> 3. 动态注册客户端的JavaScript脚本: 在不同位置注册的脚本作用有什么不同,这里不多说了。 在asp.net2.0中注册脚本用的是Page.ClientScript对象,Page.ClientScript对象是ClientScriptManager类的实例。 动态注册的客户端脚本常用的有四类: a.在<Head>标记内注册脚本 (需要在按钮的属性中设置OnClientClick="show()" ) string script = "<script language='javascript'>function show(){window.alert('hello world');}</script>"; if (!Page.ClientScript.IsClientScriptBlockRegistered("testshow")) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "testshow", script); } b.在<body>末尾注册脚本 (需要在按钮的属性中设置OnClientClick="show()" ) string script = "<script language='javascript'>function show(){window.alert('hello world');}</script>"; if (!Page.ClientScript.IsStartupScriptRegistered("testshow")) { Page.ClientScript.RegisterStartupScript(this.GetType(), "testshow", script); } c.在<Head>标记内注册JS链接文件 (需要在按钮的属性中设置OnClientClick="show()" ) string script = "<script language='javascript'>function show(){window.alert('hello world');}</script>"; if (!Page.ClientScript.IsClientScriptIncludeRegistered("testshow")) { Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "testshow", "js.js"); } d.在<body>内注册提交脚本 (无需在按钮的属性中设置OnClientClick="show()" ) string script = "window.alert('Are you sure to submit?')"; if (!Page.ClientScript.IsOnSubmitStatementRegistered("testshohw")) { Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "testshow", script); } (车延禄) |
Asp.Net2.0开发功能概览
最新推荐文章于 2010-06-04 16:23:39 发布