Asp.Net MVC HtmlHelper扩展方法没有显示

时间:2011-11-16 21:34:24

标签: asp.net-mvc extension-methods

好的,我正在尝试对HtmlHelper实施Repeater扩展方法,如Phil Haack的博客http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx中所述。 但是,当我尝试在我的View中使用它时,我得到一个编译错误'System.Web.Mvc.HtmlHelper'不包含'Repeater'的定义。

这是我的扩展类:

namespace MyAwesomeBlog.Helpers {
public static class HtmlHelpers {
    public static void Repeater<T>(this HtmlHelper html
      , IEnumerable<T> items
      , Action<T> render
      , Action<T> renderAlt) {

//实施无关紧要    });         }

    public static void Repeater<T>(this HtmlHelper html
      , Action<T> render
      , Action<T> renderAlt) {

//实施无关紧要    });         }

    public static void Repeater<T>(this HtmlHelper html
      , string viewDataKey
      , Action<T> render
      , Action<T> renderAlt) {

//实施无关紧要    });         }

    public static void Repeater<T>(this HtmlHelper html
                                      , IEnumerable<T> items
                                      , string className
                                      , string classNameAlt
                                      , Action<T, string> render) {

//实施无关紧要    });

    }
}

}

我已将其包含在我的Web.Config中:

<add namespace="MyAwesomeBlog.Helpers"/>

这是我在视图中使用扩展方法:

<% HtmlHelper.Repeater<Post>(Model, "post", "post-alt", (post, cssClassName) => { %>
    <div class="<%=cssClassName %>">
        <h1><%= post.Title %></h1>
        <p>
        <%= post.Body %>
        </p>
    </div>
<% }); %>

仍然,编译器在“.Repeater”下给出了波浪线,说HtmlHelper没有这样的方法。

我错过了什么?

5 个答案:

答案 0 :(得分:3)

您是将它添加到Views文件夹中的Web.Config还是根web.config? 它需要进入'Views / web.config'。

答案 1 :(得分:3)

关于我在其他答案中的评论,我刚刚检查过,我几乎可以肯定这是你的问题。您不能在静态类上使用扩展方法(或添加静态扩展方法),因此您需要一个HtmlHelper实例来调用Repeater。

答案 2 :(得分:1)

尝试将其更改为:

<% Html.Repeater<Post>(Model, "post", "post-alt", (post, cssClassName) => { %>
    <div class="<%=cssClassName %>">
        <h1><%= post.Title %></h1>
        <p>
        <%= post.Body %>
        </p>
    </div>
<% }); %>

View上的Html属性是HtmlHelper。

答案 3 :(得分:0)

我今天遇到了这个问题,在我的情况下关闭并重新打开页面上的html似乎就是诀窍(显然是编译项目)。

答案 4 :(得分:0)

扩展IHtmlHelper接口而不是HtmlHelper类。

public static void Repeater<T>(this IHtmlHelper html
                                  , IEnumerable<T> items
                                  , string className
                                  , string classNameAlt
                                  , Action<T, string> render) {