#asp.net-mvc-3 #asp.net-mvc-routing
#asp.net-mvc-3 #asp.net-mvc-routing
Вопрос:
Я пытаюсь реализовать общий контроллер в 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 методов, проблема в том, что это требует реализации ИДЕНТИЧНОГО представления для каждого из методов контроллера (sigh), который записывает ViewBag.Json.
Я предполагаю, что это проблема с маршрутизацией, но я борюсь с этим. Следующее не сработало —
- Попытался установить ViewBag.Затем Json с использованием RedirectToAction(), но, похоже, это сбрасывает ViewBag.Json.
- Обратите внимание, что JsonResult не подходит для моих нужд, я использую другой сериализатор JSON.
Итак, цель здесь состоит в том, чтобы сохранить один файл представления, но сохранить этот класс с отдельными методами, которые вызываются маршрутизацией, а не дерьмовой реализацией инструкции switch.
Приветствуется любая помощь.
Ответ №1:
Используйте то же представление и просто укажите имя. Вы можете сохранить в папке view контроллера, если используется только одним контроллером, или в общей папке view, если используется более чем одним.
return View("SharedJsonView");
Другим, возможно лучшим, решением было бы создать свой собственный результат — возможно, на основе JsonResult, возможно, непосредственно из ActionResult — который создает нужный вам ответ JSON. Посмотрите на исходный код для JsonResult на http://www.codeplex.com/aspnet за идеи о том, как это сделать.
Комментарии:
1. Черт возьми, это смущающе просто. Спасибо (нужно подождать 5 минут, чтобы принять ответ)
2. @Chris — если вы пойдете по пути с именем представления, вместо того, чтобы повторять его везде, подумайте о создании частного метода на вашем контроллере, который возвращает именованное представление, а затем просто вызовите его.
public ActionResult JsonView() { return View("SharedJsonView"); }
иreturn JsonView();