我有一个asp.net webforms应用程序。每个aspx.cs类都需要从继承自System.Web.UI.Page的BasePage.cs继承。
所需页面继承:
class MyChildPage : BasePage : System.Web.UI.Page
如何在创建新的子页面时强制它继承BasePage.cs而不是System.Web.UI.Page?
潜在的解决方案:
注意:这些子页面共享相同的母版页,以便提供帮助。
答案 0 :(得分:5)
不确定它是否适合您的情况,但您可以通过web.config指定整个应用程序的基页 -
<system.web>
<pages pageBaseType="BasePage" />
</system.web>
msdn上的文档:http://msdn.microsoft.com/en-us/library/950xf363(v=vs.85).aspx
答案 1 :(得分:1)
您可以使用自定义MSBuild任务来验证所有页面。例如,这里有一个Task
,它会检查只有BasePage
是否继承自Page
。如果任何其他类继承自Page
,则会在输出中记录错误,并且构建将失败:
public class CheckBasePage : Task
{
public override bool Execute()
{
var assm = Assembly.LoadFile("/path/to/WebsiteAssembly.dll");
var types = assm.GetTypes();
var pages = new List<string>();
foreach (var t in types)
{
if (t.BaseType == typeof(Page) && t.Name != "BasePage")
{
pages.Add(t.FullName);
}
}
if (pages.Count > 0)
{
Log.LogError("The following pages need to inherit from BasePage: [" + string.Join(",", pages) + "]");
return false;
}
return true;
}
}
然后,您将在项目文件中添加此自定义任务作为构建过程的一部分:
<UsingTask TaskName="CheckBasePage" AssemblyFile="/path/to/MyCustomTasksAssembly.dll" />
<Target Name="PostBuild">
<CheckBasePage />
</Target>
现在假设MyCustomTasksAssembly
是您为管理自定义MSBuild任务而创建的单独项目。如果要将CheckBasePage
任务嵌入到与其余代码相同的项目中,则需要应用same trick from here。
答案 2 :(得分:0)
作为Kelly回答的替代方案,你可以做到这一点,这更灵活,但更难以配置:
class MyChildPage : BasePage
和...
class BasePage : System.Web.UI.Page
所以MyChildPage
继承自BasePage
,继承自System.Web.UI.Page
。