【问题标题】:Custom HtmlHelper for multiple MVC apps用于多个 MVC 应用程序的自定义 HtmlHelper
【发布时间】:2014-04-27 12:17:33
【问题描述】:

我目前正在开发多个 ASP.NET MVC Web 应用程序。

所有这些网络应用程序都有相同的导航栏/菜单。 一些菜单项是特定于应用程序的,因此可以从相应的应用程序传递它们。

一些菜单项不是特定于应用程序的,例如用户是否是管理员,基于此我在导航栏上显示管理员链接。获取 admin 属性的逻辑在业务层中可用。

是否可以制作这个 html 帮助程序,这样我就不必从各个应用程序传递非应用程序特定的参数? 我可以从 html helper 调用业务层吗?

是否可取? 我想要这个 html 助手或任何其他易于分发的解决方案...

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc html asp.net-mvc-4


    【解决方案1】:

    HTML 帮助器是 System.Web.Mvc.HtmlHelper 类型的扩展方法,它返回一个 System.Web.Mvc.MvcHtmlString 对象。如果您想要“易于分发”,那么您可以使用您需要的辅助扩展创建一个库项目。然后将该项目作为参考添加到 MVC 项目中。

    @using 语句可以将扩展引入 Razor 视图。您通过库中的扩展方法引入的 helper 对象将使您能够访问在调用助手时 Razor 视图可用的大部分信息(使用 ViewContext 属性)。

    可以根据需要对扩展进行重载,以应对项目的变化。公共菜单选项可以作为静态集合添加到库中,MVC 项目和扩展方法都可以访问该集合。

    更新

    MVC 被设置成你可以做你想做的事。你有很多控制权。您的助手可以包含您需要的尽可能多的代码。这不像你在“打破规则”。但最佳实践要求您将业务逻辑保留在控制器中。通过将其放入由 Razor 视图调用的帮助程序中,您实际上是将业务逻辑移动到 Razor 视图中。

    HTML 助手通常是一种创建 HTML 代码的轻量级方法。因此,它们很容易重用,您可以在单个 Razor 视图上拥有数十个或数百个。当您将一堆业务逻辑移入帮助程序时,这个想法就会被打破。如果要大量重用助手,那么您可能会减慢速度。

    MVC 的良好经验法则,如果您的助手开始变得复杂,请创建一个局部视图。我可能会创建一个模型来表示菜单,然后在使用该模型的 Shared 文件夹中创建一个局部视图,然后从父视图中调用它。我认为这将为您提供更大的灵活性,并且更符合 MVC 最佳实践。

    【讨论】:

    • 我已经是 HTML Helper。我的问题是:我应该直接从帮助程序调用业务层,还是每个 MVC 应用程序都应该调用业务层并将管理属性传递给我。我看到有人说你不应该在 Html Helpers 中包含业务逻辑......
    • 谢谢!我明白你的意思。但是,如果我创建一个局部视图,那将变得不可分发。现在,您不能将其包装成 dll 并共享它,对吗?部分视图必须存在于当前的 MVC 项目中。
    • 底线是工作必须完成。在某个地方,代码必须存在,并且必须运行。如果它在助手或控制器中运行,它不会更快或更慢。两者都被编译到项目 DLL 中。剩下的只是优化、可读性和最佳实践。如果“最佳实践”进入灰色区域,请将其放在对您的应用程序最有意义的地方。
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2011-02-05
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多