【问题标题】:Reusable ASP.NET MVC components in dll like ASP.NET WebControlsdll 中可重用的 ASP.NET MVC 组件,如 ASP.NET WebControls
【发布时间】:2013-11-03 08:25:26
【问题描述】:

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

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

但是我应该如何将 Views 放入和重用到 dll 中?

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

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

【问题讨论】:

    标签: asp.net asp.net-mvc dll


    【解决方案1】:

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

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

    安装说明

    它在 VS 扩展库上,所以安装 从那里开始。它被称为“Razor Generator”(不要与 “用于 MVC 的 Razor 单一文件生成器”)。

    使用起来非常简单:

    在 MVC 应用中的使用

    1. 安装“RazorGenerator.Mvc”包,它注册了一个特殊的 查看引擎
    2. 转到 MVC Razor 视图的属性并将自定义工具设置为 RazorGenerator
    3. (可选)为自定义工具命名空间指定一个值,以指定生成文件的命名空间。项目命名空间由 默认。
    4. (可选)在 Razor 文件的第一行中指定一个生成器。生成器声明行如下所示:@* 生成器: 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 写的Programming ASP.NET MVC 4 告诉我们

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

    Web 表单视图 引擎提供 ViewUserControl 类,可用于 为 MVC 框架创建这样的组件。 Razor 视图引擎 但是,ASP.NET MVC 不提供任何开箱即用的此类方法。

    并建议使用Razor Single File Generator 视觉工作室扩展,另一个但类似于Razor Generator 方法。

    【讨论】:

    • 是的,Razor Generator 是个好方法。如果您需要更多信息,我可以向您推荐 Jess Chadwick 编写的 Programming ASP.NET MVC 4。有完整的第 15 章 - 可重用的 UI 组件。
    • 谢谢,我已经阅读了这本书的概述,我想我要开始阅读了。
    • Hmm Razor Generator 是一个有趣的解决方案,但对于如此简单的任务来说似乎相当复杂。我更喜欢没有任何第三方依赖的更标准的方式。第三方依赖对我来说总是一个风险。我的意思是支持下一个 Visual Studio,下一个 .NET 版本。它将如何与 msbuild 进程一起工作?那么微软呢,他们打算使用第三方扩展吗?他们是否设计了不可重用的 UI?我会研究提供的链接,稍后我会回复。
    • 我希望 MVC5 从任何开源项目中采用这个特性。 Jess Chadwick 编写的 ASP.NET MVC 4 编程告诉 “但是,ASP.NET MVC 中的 Razor 视图引擎不提供任何开箱即用的方法。”
    • 您可以轻松地在 dll 中创建控制器,为部分视图等提供 ChildAction 服务,并在 dll 中毫无问题地创建模型类。所以对于实际的cshtml文件市场,你可以将它们作为嵌入资源存储在同一个dll中。然后只需创建一个使用 Assembly.GetManifestResourceStream 的 VirtualPathProvider 来返回您的视图。然后你可以从 dll 中提供视图。
    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多