从MVC 5中的基本控制器调用方法时查看错误

时间:2017-03-18 23:41:14

标签: c# asp.net-mvc inheritance

我有以下控制器

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,2445http://www.davidwhitney.co.uk/Blog/2010/01/19/asp-net-mvc-view-engine-that-supports-view-path-inheritance/似乎控制器继承不是那么流行或直截了当的决定。我的问题的解决方案可能是: 1.不使用控制器继承 2.创建自定义视图引擎,如第二个链接所示(高级) 3.正如其他人提到的那样 - 使用视图的完整路径或RedirectToAction也可以工作

1 个答案:

答案 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();
    }
}