有没有办法将aspx文件放入Visual Studio 2008 .NET 3.5中的类库?

时间:2008-11-12 06:37:02

标签: c# .net asp.net .net-3.5

我的网站上有很多页面,我正在尝试将这些页面分成一些区域,这些区域比基础Web项目下的简单目录更加孤立。有没有办法将我的Web表单放入单独的类库中?如果是这样,它是如何完成的?

提前致谢。

5 个答案:

答案 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功能,它允许您实质上预编译。

ASP.NET Web Application Project template in Visual Studio 2008 http://www.robpaveza.net/pub/aspnet-web-app.png

需要注意的是,虽然您将控件预编译到类中,但实际上您的页面上的内容实际上并不存储在DLL中。

另一种方法是使用网站发布向导,该向导在部署之前执行自动ASP.NET编译。但是,这会使一系列DLL无法使用;生成的内容对开发人员来说并没有多大意义(你会得到像ASP.my_homepage_aspx这样的类),这些类虽然可用,但会阻碍你的开发工作。

答案 4 :(得分:0)

我认为这是可能的,我已经在我的一个项目中完成了这个项目,其中aspx文件将被物理放置在类库中。在主项目的属性中有一个选项构建事件,你可以在这里添加这样的东西

if exist "$(TargetDir)WebForm1.aspx" move /Y "$(TargetDir)WebForm1.aspx" 
"$(ProjectDir)WebForm1.aspx"