я сделал так, как предложил 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, но я подумал, что делать это изнутри будет быстрее ... верно?