Я сделал как Vdex здесь: https://stackoverflow.com/a/5801502/973485 И использовал найденный RenderPartialToString
метод. И это прекрасно работает так:View to String с другого контроллера
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Test()
{
string t = ViewToString.RenderPartialToString("Index", null, ControllerContext);
return Content(t);
}
}
Но если я хочу, чтобы сделать Главная> Индекс от другого контроллера, я получаю:
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);
}
}
Есть любой способ передать представление из другого контроллера в строку? Я пробовал много разных методов, и все они терпят неудачу в ControllerContext. Большое спасибо!
Update: Почему я должен сделать это:
Представьте У меня есть веб-сайт, полный виджетов, количество виджетов на каждой странице динамически, поэтому я не могу жёстко их в моем файле cshtml. Но в этом файле существуют разные области, в которых виджеты получают распечатку. Чтобы распечатать этот виджет, у меня есть список IWidgetController, в котором содержатся все доступные виджеты, а также интерфейсы, которые они должны содержать ActionResult для редактирования, нового и представления. пример виджетов: CalenderController, NewsController, GalleryController и т. д. Поэтому в этих областях мне нужно распечатать содержимое каждого из этих контроллеров. Теперь я могу загрузить URLHTML, но я решил, что делать это изнутри будет быстрее ... правильно?
Если вы просто хотели доставки домашней страницы в качестве домашней страницы foo/index, то вы можете просто вернуть представление с помощью пути/Главная/Индекс, если я не потерял что-то здесь – davethecoder
Год, я строю систему CMS и i имеют интерфейс для всех контроллеров виджетов. У меня есть список. И тогда в базе данных указано, что контроллеры печатаются на странице, в разных областях. – BjarkeCK
Вы не можете просто сделать Html.RenderAction («_ CalendarWidget», «Календарь») с вашего вида? –