我在我的网站上有很多页面,我试图想出一个很好的方法将这些页面分成比我的基础Web项目下的简单目录更加孤立的区域。有没有办法将我的Web表单放入单独的类库中?如果是这样,它是如何完成的?
提前致谢。
起初我认为,由于ASPX非预编译的方式,我认为这是不可能的。
但是,您可以创建从Page
继承的类,并将它们放入DLL中以重用代码隐藏功能。这当然可以包括控制实例化逻辑(如果需要),但没有设计人员可以使用(如果需要)。
我的问题是,你为什么要这样做?
如果它纯粹是组织的,那么你的“简单文件夹”应该足够了,所以也许你需要重新思考你的项目结构。
如果是出于编译目的,每次更改内容时重新编译网站需要很长时间,也许您可以将网站拆分为多个站点项目,每个项目都作为主站点的子域运行。
然后将分别重新编译这些。
如果它是一个组织的东西,但与管理有关,因为你有大量的代码,而且很难绕过,那么也许你应该评估你构建网站的方式。 N-Tier aproach或ASP.NET MVC会更好地分离您的代码吗?
你怎么看?...
你也可以实现一个VirtualPathProvider。我已经看到这样做是为了从单个zip文件中提供文件,它们也可以从DLL中提取。
这种方法的另一个困难是,如果不使用FindControl,您将无法直接访问在ASP.NET页面上创建的控件。
但是,一切都不会丢失。您可以选择使用ASP.NET Web应用程序项目,而不是使用ASP.NET网站。这使用ASP.NET 1.1功能,它允许您实质上预编译。
需要注意的是,虽然您将控件预编译到类中,但实际上您的页面上的内容实际上并不存储在DLL中。
另一种方法是使用网站发布向导,该向导在部署之前执行自动ASP.NET编译。但是,这会使一系列DLL无法使用;生成的内容对开发人员来说并没有多大意义(你会得到像ASP.my_homepage_aspx这样的类),这些类虽然可用,但会阻碍你的开发工作。
我认为这是可能的,我已经在我的一个项目中完成了这个项目,其中aspx文件将被物理放置在类库中。在主项目的属性中有一个选项Build Events,你可以把它放在这样的东西上
if exist "$(TargetDir)WebForm1.aspx" move /Y "$(TargetDir)WebForm1.aspx"
"$(ProjectDir)WebForm1.aspx"