Просмотр строки с другого контроллера - PullRequest
2 голосов
/ 22 декабря 2011

я сделал так, как предложил Vdex: https://stackoverflow.com/a/5801502/973485 И использовал метод RenderPartialToString, который он нашел. И это прекрасно работает так:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Test()
    {
        string t = ViewToString.RenderPartialToString("Index", null, ControllerContext);
        return Content(t);
    }
}

Но если я хочу визуализировать Home> Index с другого контроллера, я получаю:

Value cannot be null.
Parameter name: controllerContext

Как это:

public class FooController : Controller
{
    public ActionResult Index()
    {
        string t = ViewToString.RenderPartialToString("Index", null, new HomeController().ControllerContext);
        return Content(t);
    }
}

Есть ли способ передать View из другого контроллера в строку? Я перепробовал много разных методов, и все они терпят неудачу в ControllerContext. Большое спасибо!

Обновление: почему мне нужно это сделать:

Представьте, что у меня есть веб-сайт, полный виджетов, количество виджетов на каждой странице является динамическим, поэтому я не могу жестко закодировать их в своем файле cshtml. Но в этом файле есть разные области, где виджеты выводятся. Чтобы распечатать эти виджеты, у меня есть список IWidgetController, который содержит все доступные виджеты, и интерфейс говорит, что они должны содержать ActionResult для редактирования, нового и просмотра. Пример виджетов: CalenderController, NewsController, GalleryController и т. д. Итак, в этих областях мне нужно распечатать содержимое каждого из этих контроллеров. Теперь я также могу загрузить URLHTML, но я подумал, что делать это изнутри будет быстрее ... верно?

1 Ответ

0 голосов
/ 22 декабря 2011

Попробуйте:

string t = ViewToString.RenderPartialToString("Index", null, this.ControllerContext);

В любом случае, зачем вам преобразовывать строку?

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