Dynamics of HtmlHelper Extensions

本文关键字:Extensions HtmlHelper of Dynamics | 更新日期: 2023-09-27 17:57:23

我习惯于在键入"this"类型之后由智能感知呈现扩展方法。 但是当我使用 HtmlHelper 尝试此操作时,扩展方法没有显示 - 即使存在"using"语句。 这是为什么呢? 澄清一下,我是在常规.cs文件中而不是 .cshtml 文件中执行此测试的。 没有充分的理由,我只是在玩MVC命名空间和语言来"看看它是如何滴答作响的"。 我仍然不知道为什么智能感知没有拾取所有 4000 个扩展(我夸大了,但有很多)。

说到数千个扩展,为什么这些帮助程序例程作为扩展方法提供? 如果使用典型的静态类,则示例 razor 签名可能是:

@EditorExtensions.EditorFor<T>(...)

似乎是可行的,"框架设计指南"指出扩展应该很少使用,最好是:

  1. 仅针对接口类型。
  2. 仅在无法重新部署的类型上

似乎没有任何扩展方法"标准"适用。 这就是为什么我期望常规的静态类,使用静态方法来填充此卷。 理由是什么?

更新:非扩展帮助程序的示例代码(供进一步讨论)

public static class MyHelper
{
    public static MvcHtmlString Go(HtmlHelper foo){
        foo.Raw("Hello");
        return new MvcHtmlString("<p>What's up Doc</p>");
    }
}

Dynamics of HtmlHelper Extensions

不知道为什么智能感知没有为您显示HtmlHelper扩展方法。你确定你是using System.Web.Mvc.Html吗?

这些帮助程序之所以被实现为扩展方法,是因为它们通常需要访问与请求、模型等关联的各种状态。如果帮助程序作为静态方法实现,则在实现此目标的同时仍使帮助程序可进行单元测试要困难得多。