自定义Html字段扩展MVC3

时间:2011-11-28 22:47:53

标签: c# asp.net-mvc-3 extension-methods html-helper

我在MVC3(C#)中创建一个自定义字段,我希望通过视图中的Html属性访问该字段。我想把它放在自己的类中,以便我可以很好地组织代码(私有方法等)因为我们当前的Html Extensions类太吵了。

这就是我要找的:

离。 @Html.CustomField...

目前,我有这段代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Matrix.Investigator.Models.Parties;
using Matrix.Investigator.Website.Extensions;

namespace Matrix.Investigator.Website.Fields
{
  public static class DetailsField
  {
    public static MvcHtmlString PartyDetailsField(this HtmlHelper helper, IEnumerable<IDetailsConfiguration> configuation)
    {
      .
      .
      .

      [Some Code for the field]

      return MvcHtmlString.Create([CODE FOR TAG].toString());
    }
  }
}

无论如何,当我尝试在表单上使用它时,它不会出现在intellisense中:

ex:<li>@Html.PartyDetailsField(Model.IdentifierConfiguration)</li>

但是,当相同的代码放在HtmlHelperExtensions文件中时,它可以正常工作。我甚至没有看到班级定义的差异。

是否有任何可以照亮这种情况的光线,或者我将不得不将它留在HtmlHelperExtensions类中。

1 个答案:

答案 0 :(得分:2)

确保您已将定义此扩展方法的命名空间带入视图中的范围:

@using Matrix.Investigator.Website.Fields

<namespaces>的{​​{1}}标记(不是~/Views/web.config),以便在所有Razor视图中全局显示。

显然,由于Razor页面中Visual Studio的Intellisense的麻烦,您可能需要关闭并重新打开视图才能选择它。无论如何,在视图中永远不会信任Visual Studio的Intellisense。相信你的直觉和知识。运行应用程序是验证结果的最佳方法。