我遇到了一个奇怪的问题,而且我不能100%确定解决这个问题的方法。
给定一个MVC控制器,BaseController(下面的最小例子)
BaseController : Controller
{
public ActionResult LotsOfActions()
{
//this calls a view that renderActions AnAction(SomeModel) a bunch of times.
}
public ActionResult AnAction(Object SomeModel)
{
//do stuff
return View("AnAction",TemplateFromCode,ViewModel); //Depending on something in SomeModel, we want a different template for this.
}
}
DerivedController : BaseController
{
public override ActionResult LotsOfActions()
{
//this calls a view that renderActions BaseController.AnAction(SomeModel) a bunch of times but with different logic.
}
}
当在DerivedController上调用AnAction时,它试图使用DerivedController / AnAction.cshtml(或任何名称),我不需要存在因为子视图应该是相同的,所以我获取视图未找到错误。我如何使用BaseController / AnAction.cshtml来实现它?我不想为此使用共享视图文件夹,因为在DerivedController之前扫描了以防我想要覆盖此视图的其他东西是BaseController的子类。
答案 0 :(得分:2)
最简单的方法是在基类中明确指定视图的完整路径,如下所示:
public ActionResult AnAction(Object SomeModel)
{
//do stuff
return View("~/Views/Base/AnAction.cshtml",TemplateFromCode,ViewModel);
}
答案 1 :(得分:1)
而不是继承基本控制器为什么没有调用AnAction只调用那个控制器?通常,控制器继承用于内部细节,而不是公共操作方法覆盖。
否则你会遇到DavidG建议的问题,因为视图路径是从已实现的控制器位置自动构建的,而不是基本控制器。