Визуализация представления в строку в ASP.NET MVC 2 - PullRequest
5 голосов
/ 16 марта 2010

Нам нужно отобразить ActionResult в string, чтобы добавить страницы в наш внутренний индекс поисковой системы. Мы остановились на этом решении для рендеринга в строку .

Я столкнулся с проблемой вызова ExecuteResult, используемого для обработки представления.

Фрагмент кода:

var oldController = controllerContext.RouteData.Values["controller"];
controllerContext.RouteData.Values["controller"] = 
                  typeof(TController).Name.Replace("Controller", "");

viewResult.ExecuteResult(controllerContext); // this line breaks

Я получаю следующую ошибку:

"Object reference not set to instance of object" error.

Я подтвердил, viewResult не равно нулю, поэтому исключение должно быть выдано внутри ExecuteResult

Чего нам не хватать?

Ответы [ 4 ]

2 голосов
/ 27 марта 2010

Я понял это. Проблема с ExecuteResult не работала должным образом из-за того, что я неправильно смоделировал ControllerContext. Мне удалось решить эту проблему путем насмешки контекста контроллера, как описано в этом сообщении SO:

Контролируемый контекст контроллера Asp.net-mvc

Надеюсь, что этот пост поможет кому-то в будущем, если он попытается сделать что-то подобное.

0 голосов
/ 16 марта 2010

MVCContrib имеет класс BlockRenderer , который может быть полезен для этого сценария.

0 голосов
/ 26 марта 2010

Не прямой ответ на ваш вопрос, но зачем вам выводить все представление в виде строки в ваш поисковый индекс, а не а) вставлять сами данные в индекс (LINQ to Lucene позволяет вам делать это с атрибутами) ) или б) переложить работу на отдельный процесс, который сканирует интерфейс, используя некоторый набор прав?

0 голосов
/ 16 марта 2010

Я сам не пробовал, но Фил Хаак предложил способ вывести представление в строку здесь с учетом MVC.

...