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