这一阵总是碰到这样的问题,CS文件中不识别Web窗体中的控件。以前没太在意Page指令,命名控件,这次出了问题,引起了重视。
Page指令
<%@ Page Language="C#" CodeFile="~/Manager/Exammanager/admExamtype.aspx.cs" AutoEventWireup="true" Inherits="ExamSystemV3.Web.Manager.Exammanager.admExamtype" Codebehind="admExamtype.aspx.cs" %>
每个.aspx文件只能包含一条@Page指令。一个Language属性。
各属性含义:
AutoEventWireup:指示页的事件是否自动绑定。默认为True。
CodeBehind:指定包含于页关联的类(WEB窗体对应代码文件的类)的已编译文件的名称。该属性不能在运行时使用。
注意:提供此属性是为了与以前版本的 ASP.NET 的兼容,以实现代码隐藏功能。在 ASP.NET 2.0 版中,应改用 CodeFile属性指定该源文件的名称,同时使用 Inherits 属性指定该类的完全限定名称。
CodeFile:指定指向页引用的代码隐藏文件的路径。此属性与Inherits属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效。
Inherits:定义供页继承的代码隐藏类。它可以是从Page类派生的任何类。表示后置代码是……CS文件
CodeBehind与CodeFile的区别:
CodeBehind不能再运行时使用;CodeFile仅对编译的页有效,可以修改代码后不用整体编译刷新页面就可以看到效果。
<%@ Page Language="C#" AutoEventWireup="true" Inherits="ExamSystemV3.Web.Manager.Exammanager.admExamtype" Codebehind="admExamtype.aspx.cs" %>
<%@ Page Language="C#" CodeFile="~/Manager/Exammanager/admExamtype.aspx.cs" AutoEventWireup="true" Inherits="ExamSystemV3.Web.Manager.Exammanager.admExamtype" %>
开发时页面的逻辑代码.CS文件存在时,两种都可以用,但是部署到站点后,不部署CS文件的时候后一种写法就会出错找不到文件。
namespace和类名
命名空间是用来组织和重用代码的编译单元。如果写了相同名称的变量或者函数,通过命名空间可以区分。所以当我们命名空间和类名出错的时候控件也不可识别。
web页 <%@ Page Language="C#" AutoEventWireup="true" Inherits="ExamSystemV3.Web.Manager.Exammanager.admAddcheating" Codebehind="admAddcheating.aspx.cs" %>
.cs类 namespaceExamSystemV3.Web.Manager.Exammanager { public partial class admAddcheating :System.Web.UI.Page { } }
总结
通过这个问题认识到,细节决定成败,往往不去在意的地方更会出问题。意识不到不代表不重要。这个问题同时也是全局问题,这两个文件中这两个最重要的地方写不对界面中的代码写的再好都没用。全局观。