ASP.NET MVC继承控制器使用基本视图

时间:2016-06-01 17:01:20

标签: c# asp.net asp.net-mvc-4 razor

我遇到了一个奇怪的问题,而且我不能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的子类。

2 个答案:

答案 0 :(得分:2)

最简单的方法是在基类中明确指定视图的完整路径,如下所示:

public ActionResult AnAction(Object SomeModel) 
{ 
    //do stuff
    return View("~/Views/Base/AnAction.cshtml",TemplateFromCode,ViewModel);
}

答案 1 :(得分:1)

而不是继承基本控制器为什么没有调用AnAction只调用那个控制器?通常,控制器继承用于内部细节,而不是公共操作方法覆盖。

否则你会遇到DavidG建议的问题,因为视图路径是从已实现的控制器位置自动构建的,而不是基本控制器。