2011-12-22 5 views
2

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

+0

Если вы просто хотели доставки домашней страницы в качестве домашней страницы foo/index, то вы можете просто вернуть представление с помощью пути/Главная/Индекс, если я не потерял что-то здесь – davethecoder

+0

Год, я строю систему CMS и i имеют интерфейс для всех контроллеров виджетов. У меня есть список. И тогда в базе данных указано, что контроллеры печатаются на странице, в разных областях. – BjarkeCK

+0

Вы не можете просто сделать Html.RenderAction («_ CalendarWidget», «Календарь») с вашего вида? –

ответ

0

Попробуйте это:

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

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

+0

Благодарим вас за предложение. this.ControllerContext работает! Но это неправильный ControllerContext, он должен быть ControllerContext из HomeController. – BjarkeCK

+0

Я создаю систему виджетов для своей CMS, где каждый виджет имеет собственный контроллер с ViewWidget, EditWidget и newWidget ActionResults. – BjarkeCK

+0

@BjarkeCK, это работает !, но это неправильно. **?! ** – gdoron

Смежные вопросы