|
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="default.aspx.cs" Inherits="_Default" %>
<%@ Page Language="C#" AutoEventWireup="true" Src="default.aspx.cs" Inherits="_Default" %> <%@ Page Language="C#" AutoEventWireup="true" Codebehind="default.aspx.cs" Inherits="_Default" %> 以上三句,具体差别在哪? --------------------------------------------------------------- src表示该aspx的源文件 codefile表示将运行时编译,比如VS2005中新建一个网站你会发现编译比WEB应用程序慢很多,但是可以修改代码后不用整体编译刷新页面就可以看到效果 codebehind就象.netfw1.1一样编译完后所有cs中的代码打包进dll --------------------------------------------------------------- CodeBehind: 指定包含与页关联的类的已编译文件的名称。该属性不能在运行时使用。 提供此属性是为了与以前版本的 ASP.NET 的兼容,以实现代码隐藏功能。在 ASP.NET 2.0 版中,应改用 CodeFile 属性指定该源文件的名称,同时使用 Inherits 属性指定该类的完全限定名称。 CodeFile 指定指向页引用的代码隐藏文件的路径。此属性与 Inherits 属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效。 --------------------------------------------------------------- src 好象是 ASP.NET 1.x 才会有,2.0 的 code-behind 变成 CodeFile 了 . Code-Behind 的好处就是它可以被编译,会比直接写在网页上的直译程序快,而且可以防止程序代码外泄的问题 移动项目开发笔记(用户控件引起对asp.net 2.0编译的思考)一、起因: <%@ Register Src="ProjectInfo.ascx" TagName="ProjectInfo" TagPrefix="uc3" %>
<uc3:ProjectInfo ID="ProjectInfo1" runat="server" /> 通过反复的查找都发现这个代码没有问题,我也查找以前的用户控件页是这样注册的。那到底是那儿出了问题了呢?功夫不负有心人,终于找到问题所在了,用户控件的申明是这样写的 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProjectInfo.ascx.cs" Inherits="ProjectInfo" %>
问题就在那CodeFile,由于所在的项目是Web Application应用程序,申明的用户控件应该是CodeBehind,怎么回变成CodeFile呢?终于找到问题所在了。当我把CodeFile修改成CodeBehind后页面就能正常显示了。那这儿被谁谁修改成CodeBehind了。通过查看VSTS修改历史,没有人对这个文件进行修改,当时增加这个文件的时候就已经是CodeFile了。Web Application默认增加的用户控件都是CodeBehind的。除非不是Web Application,当时我就建立的一个web site站点,就添加了一个用户控件,一看果然是这样什么的: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProjectInfo.ascx.cs" Inherits="ProjectInfo" %>
问题的来源页找到了,原来这个用户控件是通过Web Site站点添加的移植过来的而引起的。谢谢上帝,终于把这个问题解决了。 通过上面的比较后,我们现在已经是比较明白上面的用户控件申明应该用CodeBehind而不能用CodeFile。其根本原因就是:Web Application的页面用的是CodeBehind的方式,如果里面的用户控件又用CodeFile的方式来编译的化,就出现矛盾,那么页面就优先于用户控件的方式,直接把所有的代码文件编译成dll文件就可,而不是把页面文件生成一个partial类再和代码文件一起编译。因此那样的话页面的用户控件将不会被VS.net根据页面的内容生成一个临时类和CodeBehind中的Partial类整合编译,缺少对用户控件的申明,从而会出现:The base class includes the field *****, but its type (****) is not compatible with the type of control (ASP.webusercontrol_ascx). |

评论表单加载中...