您的位置:首页 > 编程语言 > ASP

Asp.Net2.0开发功能概览

2008-08-27 21:33 197 查看
一、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);
}

来源:http://blog.csdn.net/hehuii/archive/2008/04/03/2247221.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: