【问题标题】:Inheriting from HtmlHelper instead of Extending it从 HtmlHelper 继承而不是扩展它
【发布时间】:2012-12-18 22:03:08
【问题描述】:

我正在创建一组帮助程序来呈现兼容的Twitter Bootstrap html。在我看来,在如何将这些方法组合在一起时,我有两种选择:

  • 扩展 HtmlHelper 前缀为 TB 的方法
  • 创建一个包含方法的新类TBootHelper

在第二种情况下,要获得 TBoot 助手可用,开发人员将添加

<pages pageBaseType="Twitter.Bootstrap.Mvc.TBootViewPage">

发给~/Views/web.config(@darin 指出)

或在需要时实例化助手

@using Twitter.Bootstrap.Mvc
var TBoot = new TBootHelper<TModel>(Html);

我的问题是,我应该创建一个TBootHelper 类还是只向HtmlHelper 添加方法?

【问题讨论】:

    标签: asp.net-mvc-3 html-helper


    【解决方案1】:

    我会创建一个自定义TBootHelper 和一个自定义基本视图,所有视图都将从该视图继承,并且具有TBootHelper 类型的属性。

    我不会强迫开发人员将@inherits Twitter.Bootstrap.Mvc.TBootViewPage&lt;TModel&gt; 添加到他想在其中使用此自定义帮助程序的每个 Razor 模板中,而是一劳永逸地将其添加到 ~/Views/web.config 文件中:

    <pages pageBaseType="Twitter.Bootstrap.Mvc.TBootViewPage">
    

    然后在视图中:

    @model MyViewModel
    @TBoot.Foobar()
    

    【讨论】:

    • 我认为这部分文字让我的问题变得混乱。使来自 TBootViewPage WILL 的 View Inherit 成为可选的。所以开发者可以将它添加到他想要的web.config IF 中。这样他就不必在每个视图上都实例化TBootHelper。问题是:我应该创建一个TBootHelper 类还是只向HtmlHelper 添加方法?我会澄清这个问题
    • @svallory,这是一个主观问题。不要指望它的答案。做任何你觉得舒服的事。如果要对方法进行分组,请添加 TBootHelper,将扩展添加到 HtmlHelper 以便于发现。真的取决于你和你的场景。
    • 似乎每个人都在使用扩展方法。您是否发现创建另一个类可能会遇到任何陷阱或问题?
    • @svallory,这将取决于您要设计和实现的目标。您将必须提供有关您的系统、目标等的更多详细信息……即使在此之后,也可能很难回答这个问题。这几乎就像是在问我应该使用 .NET 还是 Java 来设计我的应用程序。我只能告诉你:选择你认为最适合你的场景的方法。
    • 我不这么看。如果我知道HtmlHelper 的依赖关系,我会评估它。例如HtmlHelper 是否使用了我在创建另一个类时无法访问的任何内部资源?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多