MVC3路由问题 - 如何为所有控制器方法重用View?

时间:2011-05-11 23:54:35

标签: 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多个方法,问题是这需要为每个写出ViewBag.Json的Controller方法(叹气)实现一个IDENTICAL视图。

我认为这是一个路由问题,但我正在努力解决这个问题。以下不起作用 -

  • 尝试设置ViewBag.Json,然后使用RedirectToAction()但似乎重置了ViewBag.Json。
  • 注意JsonResult不适合我的需要,我正在使用不同的JSON序列化器。

因此,这里的目标是维护一个View文件,但保持此类具有由路由调用的单独方法,而不是一个糟糕的switch语句实现。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:3)

使用相同的视图,只需指定名称即可。您可以存储在控制器的视图文件夹中,如果仅由一个控制器使用,或者如果由多个控制器使用,则存储在共享视图文件夹中。

return View("SharedJsonView");

另一个可能更好的解决方案是创建自己的结果 - 可能是从JsonResult派生的,可能直接来自ActionResult - 它可以创建您需要的JSON响应。请查看http://www.codeplex.com/aspnet上JsonResult的源代码,了解有关如何执行此操作的建议。