从不同的Action返回ActionResult时的ASP.NET MVC View问题

时间:2009-09-16 20:35:18

标签: asp.net-mvc controller-actions

我有两个ASP.NET MVC操作:

public ActionResult GetAll()
{
      return GetOne(1);
}

public ActionResult GetOne(Int32 id)
{
      return View(id);
}

public ActionResult GetAll() { return GetOne(1); } public ActionResult GetOne(Int32 id) { return View(id); }

如您所见,GetAll正在调用GetOne操作。但是,当调用GetAll()(调用GetOne(id)并且应该返回GetOne视图)时,MVC会抛出一个错误,指出没有GetAll视图。咦?

如何让GetAll调用GetOne并使用GetOne的视图(我认为这是合乎逻辑的事情)?

2 个答案:

答案 0 :(得分:6)

public ActionResult GetOne(Int32 id)
{
      return View(id, "GetOne");
}

明确指定视图名称会覆盖默认值,即使用路由值集合中的操作键,在这种情况下等于“GetAll”。

答案 1 :(得分:1)

与许多MVC框架一样,ASP.NET MVC根据约定做出了很多假设。如果你不遵循他们的惯例,你还有一些工作要做。在这种情况下,惯例是它们是与您的操作同名的视图,位于与控制器名称对应的文件夹中。

如果你的控制器是UsersController,你的行动是GetAll,它希望找到一个视图Views / Users / GetAll。

如果要返回与不同操作对应的视图,则需要指定(而不是使用默认值):

return View(id, "GetOne")