解决办法:<%@PageCodeFile="***"Inherits="***" >
这时候,ASP.net 就需要找 CodeFile 中指定的文件,以便动态编译,但是找不到,所以就报上述错误了。
对于开发时,即页面的逻辑代码 cs 文件存在的时候,下属两种写法都没有问题。
<%@ Page Language="C#" AutoEventWireup="true" Codebehind="index.aspx.cs" Inherits="Community.IndexHomePage.index" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="Community.IndexHomePage.index" %>
但是部署到站点后,我们不会部署 cs 文件,这时候,后一种写法就会报找不到文件的错误了。除非你把 cs 也部署出去,否则就会报编译时错误,找不到文件...
Inherits、CodeFile、CodeBehind的区别
Inherits:(继承)
Msdn解释:定义页面继承的代码隐藏类。它可以是从Page类派生的任何类。此特性与CodeFile特性一起使用,后者包含指向代码隐藏类的源文件路径。Inherits特性在使用c#作为页面语言时区分大小写。如果 Inherits 特性不包含命名空间,ASP.NET 将检查 ClassName 特性是否包含命名空间。如果包含,ASP.NET 将尝试使用 ClassName 特性的命名空间加载 Inherits 特性中引用的类。(这假定 Inherits 特性和 ClassName 特性使用同一命名空间。)
Inherits 属性用于定义当前 Web 窗体所继承的代码隐藏类(该类是 System.Web.UI.Page 的派生类)。
这个 inherits 属性只用于采用代码隐藏方式编写的 Web 窗体,也就是,如果你的代码全都是在 Web 窗体的
<script runat="server"></script> 标签中,就不必用这个属性了。
CodeFile
msdn解释:指定指向页引用的代码隐藏文件的路径。此特性与 Inherits 特性一起使用,用于将代码隐藏源文件与网页相关联。此特性仅对编译的页有效。
此特性用于网站项目。
Codebehind
msdn解释:指定包含与页关联的类的已编译文件的名称。该特性不能在运行时使用。此特性用于 Web 应用程序项目。
Codebehind 属性并不是一个真正的 ASP.NET 属性,在ASP.NET 文档中是找不到它的。
它其实只是一个 Visual Studio .NET 属性,
Visual Studio .NET 就是借用这个属性来很好地跟踪管理项目中的 Web 窗体和与之相对的代码隐藏文件,
比如当你在设计环境中往 Web 窗体上放入一个服务器控件时,
Visual Studio .NET 将自动找到与该 Web 窗体相对应的代码隐藏文件,并自动插入相关的代码。
本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1217515,如需转载请自行联系原作者