我有以下控制器
public class StoreController : Controller
{
public ActionResult Index()
{
var model = new SomeViewModel();
return View(model);
}
}
和
public class SofiaStoreController : StoreController
{
public ActionResult GetIndex(string city)
{
return base.Index();
}
}
从派生类调用基本Index方法时,我收到此错误:
视图' getindex'或者没有找到它的主人或没有查看引擎 支持搜索的位置。以下地点是 搜寻:
似乎GetIndex()方法默认在派生控制器的视图文件夹中查找视图,即使没有调用View()方法,但由于没有这样的错误发生。
知道为什么该方法隐式查找视图以及如何克服错误?
编辑:在花了一些时间研究这个问题后,我发现了这两个帖子:http://howtoprogram.eu/question/asp-net-c-asp-net-mvc-inherited-controller-using-base-view,2445和http://www.davidwhitney.co.uk/Blog/2010/01/19/asp-net-mvc-view-engine-that-supports-view-path-inheritance/似乎控制器继承不是那么流行或直截了当的决定。我的问题的解决方案可能是: 1.不使用控制器继承 2.创建自定义视图引擎,如第二个链接所示(高级) 3.正如其他人提到的那样 - 使用视图的完整路径或RedirectToAction也可以工作答案 0 :(得分:-1)
它会根据您最初调用的Action方法名称查找视图。如果使用接受视图名称/路径的重载View()方法,则始终可以覆盖此行为:
public class StoreController : Controller
{
public ActionResult Index(string viewName = "Index")
{
var model = new SomeViewModel();
return View(viewName, model);
}
}
public class SofiaStoreController : StoreController
{
public ActionResult GetIndex(string city)
{
return base.Index();
}
}