Как создать HtmlHelper вне представления в ASP.NET MVC 2.0? - PullRequest
4 голосов
/ 21 июня 2010

Мы находимся в процессе обновления приложения ASP.NET MVC 1.0 до версии 2.0, и часть кода требует использования LinkExtensions, которые требуют HtmlHelper для визуализации. Хотя мы знаем, что часть кода не соответствует модели MVC правильно и находится в процессе перекодирования по мере необходимости, нам нужно что-то для работы, чтобы заставить приложение собираться.

Вот текущий имеющийся у нас синтаксис, который работает под ASP.NET MVC 1.0:

public static HtmlHelper GetHtmlHelper(ControllerContext context)
{
    return new HtmlHelper(new ViewContext(context,
                                          new WebFormView("HtmlHelperView"),
                                          new ViewDataDictionary(),
                                          new TempDataDictionary()),
                          new ViewPage());
}

Ошибка, которую мы получаем, выглядит следующим образом:

Ошибка 1 «System.Web.Mvc.ViewContext» не содержит конструктор, который принимает 4 аргумента

Ответы [ 2 ]

5 голосов
/ 21 июня 2010

Существует дополнительный аргумент, который принимает TextWriter :

var viewContext = new ViewContext(
    context,
    new WebFormView("HtmlHelperView"),
    new ViewDataDictionary(),
    new TempDataDictionary(),
    context.HttpContext.Response.Output
);

Вопрос здесь в том, зачем вам создавать экземпляр htmlHelper вместо того, чтобы использовать тот, который представлен в представлениях?

2 голосов
/ 21 июня 2010

Проблема (как следует из сообщения об ошибке) в том, что больше нет конструктора ViewContext, который принимает 4 параметра.Они добавили пятую часть, которая является автором текстов.Вы можете создать viewcontext следующим образом:

new ViewContext(context,
                                      new WebFormView("HtmlHelperView"),
                                      new ViewDataDictionary(),
                                      new TempDataDictionary()),
                      new ViewPage(), context.HttpContext.Response.Output);
...