5

我有几个网站,这些网站共享几个组件。使用经典的 ASP.NET WebControls ascx 非常容易。我创建了几个这样的控件,放入一个 dll 库中,并通过 namespace.elements runat=server... 从这些网站引用这些库。

但是我升级到 ASP.NET MVC 后不知道该怎么做。我可以将模型和控制器类放入 dll 中。

但是我应该如何将视图放入并重用到 dll 中?

如果我可以在不重新编译 dll 的情况下更改视图,我想视图不会被编译成 dll。

编辑:与第三方相比,我更喜欢一些标准解决方案。我的最后一个解决方案是使用 StringBuilder 而不是 ViewEngine。

4

1 回答 1

6

多年来,我一直在使用Razor Generator将可重用的 MVC 视图和助手存储在单独的 .dll 中。

Razor Generator “是 Visual Studio 的自定义工具,它允许在设计时而不是运行时处理 Razor 文件,允许将它们构建到程序集中以便更简单地重用和分发。”

安装说明

它在 VS 扩展库上,所以从那里安装它。它被称为“Razor Generator”</a>(不要与“Razor Single File Generator for MVC”混淆)。

使用起来非常简单:

在 MVC 应用程序中的使用

  1. 安装“RazorGenerator.Mvc”包,它注册了一个特殊的视图引擎
  2. 转到 MVC Razor 视图的属性并将自定义工具设置为 RazorGenerator
  3. (可选)为自定义工具命名空间指定一个值,以指定生成文件的命名空间。默认使用项目命名空间。
  4. (可选)在 Razor 文件的第一行中指定一个生成器。生成器声明行如下所示:@* Generator: MvcHelper *@。如果你不指定这个,一个生成器会根据约定来选择(例如,视图下的文件被视为 MvcViews)
  5. 您将在 .cshtml 文件下看到生成的 .cs 文件,该文件将在运行时使用,而不是 .cshtml 文件
  6. 您还可以转到 nuget 包管理器控制台并运行“Enable-RazorGenerator”以在所有视图上启用自定义工具。
  7. 要重新生成所有视图,请转到 nuget 包管理器控制台并运行“Redo-RazorGenerator”。当您更新生成器包并且它需要生成不同的代码时,这很有用。

类库应选择 MVC 项目,以支持智能感知和其他有用的功能。

在视图库中的使用

如果您需要为预编译的 MVC 视图创建一个单独的库,最好的方法是为该库创建一个 MVC 项目,而不是一个库项目。你永远不会真正将它作为 Mvc 应用程序运行,但它带有正确的配置文件集这一事实允许智能感知和其他东西比在库项目中更好地工作。

然后,您可以从您的真实 MVC 应用程序中添加对该“MVC 视图项目”的引用。

请注意,您需要将“ RazorGenerator.Mvc ”包安装到库中,而不是主 MVC 应用程序中。

Jess Chadwick 编写的编程 ASP.NET MVC 4告诉我们

在 ASP.NET Web 窗体世界中,您可以通过创建可编译为独立程序集的用户控件或自定义控件来实现此目的。这些程序集可以跨项目分布,从而使它们能够跨项目重用。

Web 窗体视图引擎提供ViewUserControl类,可以利用该类为 MVC 框架创建此类组件。但是,ASP.NET MVC 中的 Razor 视图引擎不提供任何开箱即用的此类方法。

并建议使用Razor Single File Generator Visual Studio 扩展,这是另一个与Razor Generator方法类似的扩展。

于 2013-11-03T09:55:22.603 回答