Метод расширения Asp.Net MVC HtmlHelper не отображается - PullRequest
1 голос
/ 17 ноября 2011

Хорошо, я пытаюсь реализовать методы расширения Repeater для HtmlHelper, как описано в блоге Фила Хаака здесь http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx Однако, когда я пытаюсь использовать его в своем представлении, я получаю сообщение об ошибке компиляции «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 ]

3 голосов
/ 17 ноября 2011

Что касается моего комментария в моем другом ответе, я только что проверил, и я почти уверен, что это ваша проблема. Вы не можете иметь методы расширения для статических классов (или добавлять статические методы расширения), поэтому вам нужен экземпляр HtmlHelper для вызова Repeater.

3 голосов
/ 17 ноября 2011

Вы добавили это в Web.Config в папке Views или в корневой web.config? Для этого нужно перейти в «Views / web.config».

1 голос
/ 17 ноября 2011

Попробуйте изменить его на:

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

Свойство Html в вашем представлении является HtmlHelper.

0 голосов
/ 26 июля 2018

Расширение интерфейса IHtmlHelper вместо класса HtmlHelper.

public static void Repeater<T>(this IHtmlHelper html
                                  , IEnumerable<T> items
                                  , string className
                                  , string classNameAlt
                                  , Action<T, string> render) {
0 голосов
/ 17 ноября 2011

Я столкнулся с этой самой проблемой сегодня, и в моем случае закрытие и повторное открытие страницы с html-кодом, похоже, помогло (и компилировала проект, очевидно).

...