我刚刚从System.Web.UI.Page
继承了我的页面的基类:
public abstract class PageBase : System.Web.UI.Page
{
...
}
当我注意到你也可以在ASP.NET视图中声明一个基页:
<%@ Page Language="C#" CodeFileBaseClass="PageBase.cs" CodeFile="page.aspx.cs"
Inherits="page" %>
有人能解释一种方法的优点和缺点是什么吗?你什么时候使用一个,或者它们都是一样的?如果你同时使用两者会怎么样?
答案 0 :(得分:4)
CodeFileBaseClass
,CodeFile
,Inherits
与继承一起使用,而不是继承。
例如,指定不存在CodeFile="page.aspx.cs"
的{{1}}将导致:
page.aspx.cs
假设存在Parser Error Message: The file '/page.aspx.cs' does not exist.
,则指定不存在page.aspx.cs
的{{1}}将导致:
CodeFileBaseClass="PageBase.cs"
另一方面,您可以继承PageBase.cs
而不指定Parser Error Message: Could not load type 'PageBase.cs'.
属性。但是,当从基类引用页面上的控件时,这可能会导致意外行为。
引用Microsoft's @Page MSDN Documentation:
的 CodeFileBaseClass 强>
指定页面的基类的类型名称及其关联的代码隐藏类。这个属性是可选的,但是当它被使用时 CodeFile 属性也必须存在。如果要实现共享方案,请在此处定义common,请使用此属性 基类中的字段(以及可选的关联事件) 引用网页中声明的控件。因为ASP.NET 代码生成模型,如果您在基类中定义了字段 不使用此属性,在编译时新成员定义 将为网页中声明的控件生成(在一个 单独的部分类存根),你想要的方案不会 工作。但是,如果您使用 CodeFileBaseClass 属性进行关联 带有页面的基类,然后你创建你的部分类(它的 name被分配给 Inherits 属性,其源文件是 由 CodeFile 属性引用)继承自基类, 然后基类中的字段将能够引用 代码生成后页面上的控件。