以前用VS2003写的ASP.Net程序,现在需要升级到VS2005,公司同事、领导整理了一份文档,觉得很实用。和大家一起分享。:)


1)  UserControl引用的路径

在引用UserControl的路径时,VS2003下面一般这样:

<%@ Register TagPrefix="uc1" TagName="MSMenuItem" Src="/Controls/MSMenuItem.ascx" %>

但是在VS2005中,这样的绝对路径是不认的,如果仍然需要这样引用,需要加上一个“~”:

<%@ Register TagPrefix="uc1" TagName="MSMenuItem" Src="~/Controls/MSMenuItem.ascx" %>


2)  在ASPX页面中的的cs文件Inherits

ASPX页面中,以往的Inherits这样写:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DocLibViewBlank.ascx.cs" Inherits="DocLibViewBlank" %>
但如果这个类是在某个NameSpace中的,例如是IKW.Portal.Controls这个NameSpace中的,这样写在编译时就会提示“请确定Inherits扩展了正确的类”这样的错误。
为了解决此问题,只需要:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DocLibViewBlank.ascx.cs" Inherits="IKW.Portal.Controls.DocLibViewBlank" %>
把类的全部路径写明就可以了。

3)  有关NameSpace

在VS2003中,默认的目录管理方式是用NameSpace来处理的。也就是说,如果在IKW.Portal的根的Controls目录下有一个DictSelector的ascx文件,那么他的类会自动处于
namespace IKW.Portal.Controls
{
}
这样的NameSpace下面。
在VS2005里面,淡化了多重NameSpace的概念,不在严格的用NameSpace来区分,而是直接把目录名放在类里面。也就是说,会创建一个
public partial class Controls_DictSelector
{
}
注意上面类的名称中带有了Control的前缀。
感觉这样的好处是一般类型开发方便了,就算分布在多个目录下,仍然是同处在一个默认的NameSpace中,直接用名称引用就行。
但是在开发比较复杂的应用时,仍然建议使用NameSpace的方法,这样程序的结构比较完整。这时候NameSpace需要手工加入。

4)  ASP.NET窗体事件代码的复制

如果直接把一个VS2003制作的WebForm复制到VS2005下,页面的形状是可以自动解析的。但是对于事件的代码,如果是先复制进来,然后在控件的“Events”中选择对应的处理方法,这样在编译时就会出错,提示引用了不可访问的代码。估计原因是因为VS2005中,引入了Partial Class,每个页面在后台还有一个隐藏的MetaData文件,记录了事件代码和其对应的情况,而直接复制事件代码,这个隐藏文件中是不能自动更新的。
对于对这种情况,有两种方法:
1、把事件处理代码由Private改为Public,就可以了,但是这不很安全,也不符合封装的概念
2、就是 不要直接复制事件的整个代码,而是在VS2005里面在指定的事件中双击,让它自动生成代码的框架,再把代码复制进入,这样就可以了。