Проблемы маршрутизации MVC3 - Как повторно использовать представление для всех методов контроллера? - PullRequest
2 голосов
/ 12 мая 2011

Я пытаюсь реализовать общий контроллер в MVC3 для возврата различных каналов JSON, пример -

public class AjaxController : Controller
{
    public ActionResult Feed1()
    {
        ViewBag.Json = LogicFacade.GetFeed1Json();
        return View();
    }

    public ActionResult Feed2()
    {
        ViewBag.Json = LogicFacade.GetFeed2Json();
        return View();
    }
}

В этом классе более 30 методов, проблема в том, что для этого требуется реализация IDENTICAL View длякаждый из методов Контроллера (вздох), который записывает ViewBag.Json.

Я предполагаю, что это проблема маршрутизации, но я борюсь с этим.Следующее не сработало -

  • Попытка установки ViewBag.Json с последующим использованием RedirectToAction (), но это, похоже, сбрасывает ViewBag.Json.
  • Примечание JsonResult не подходит для моих нужд,Я использую другой сериализатор JSON.

Таким образом, цель здесь состоит в том, чтобы поддерживать один файл View, но сохранить этот класс с отдельными методами, вызываемыми маршрутизацией, а не с дрянной реализацией оператора switch.

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 12 мая 2011

Используйте тот же вид и просто укажите имя. Можно сохранить в папке просмотра контроллера, если используется только одним контроллером, или в папке общего доступа, если используется более чем одним.

return View("SharedJsonView");

Другим, возможно, лучшим решением было бы создание собственного результата - возможно, производного от JsonResult, возможно, непосредственно от ActionResult - который создает требуемый ответ JSON. Посмотрите исходный код JsonResult на http://www.codeplex.com/aspnet, чтобы узнать, как это сделать.

...