Html вспомогательный метод не выводит результаты на странице просмотра MVC - PullRequest
0 голосов
/ 02 октября 2009

Мой помощник выглядит так:

public static string OutputBlah( this HtmlHelper helper )
{

 return htmlWriter.InnerWriter.ToString();
}

тогда на моей странице просмотра:

<%= MyHelpers.OutputBlah() %>

Должно ли это работать или я что-то упустил? Ошибка говорит, что нет перегрузки, которая принимает 0 аргументов.

Что я должен передать моему методу на странице просмотра?

Ответы [ 3 ]

4 голосов
/ 02 октября 2009

Вы пытаетесь вызвать метод расширения с помощью статического вызова метода. Вы можете изменить свой код на

<%= MyHelpers.OutputBlah(Html) %>

Но вы, вероятно, должны изменить его, чтобы использовать его как правильный метод расширения:

<%= Html.OputputBlah() %>

Чтобы сделать это, вам нужно <% @ Import Namespace = "YourHelperNameSpace"%> вверху страницы. Или добавьте его в узел web.config.

0 голосов
/ 03 октября 2009

Я думаю, вам нужно очистить HTML-писатель. Я почти уверен, что это так.

Редактировать: Прошу игнорировать - я неправильно прочитал оригинальный вопрос.

0 голосов
/ 02 октября 2009

Как выглядит объявление класса? Убедитесь, что вы сделали сам класс static:

public static class MyHelpers
{
    public static string OutputBlah(this HtmlHelper helper)
    {
        return helper.InnerWriter.ToString();
    }
}

А затем используйте обычное свойство Html типа HtmlHelper в View:

<%= Html.OutputBlah() %>

Ответ на дополнительный вопрос от ОП:

При объявлении метода, подобного этому (метод static в static class и первый параметр с ключевым словом this), вы определяете метод расширения - особенность, которая была представлена ​​в C # 3.0. Основная идея заключается в том, что вы определяете метод, который подключается к другому классу, таким образом расширяет it.

В этом случае вы расширяете класс HtmlHelper (потому что это тип параметра this) и тем самым делаете .OutputBlah() доступным для любого экземпляра HtmlHelper. Если вы изучите свойство Html ViewPage, вы заметите, что оно на самом деле имеет тип HtmlHelper.
Поэтому, когда вы используете Html.OutputBlah() в своем представлении, вы фактически получаете доступ к экземпляру HtmlHelper, содержащемуся в свойстве Html страницы просмотра, и вызываете собственный метод расширения для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...