2017-07-31 62 views
2

考虑这种情况下,有一个基类我们可以在控制器中使用虚拟操作项吗?

public abstract class BaseController:Controller 
{ 
    public virtual ActionResult Index() => View(); 
} 

显然我们不能有由于它是抽象的视图基类。下面是派生类:

public class MyController: BaseController 
{ 
    // everything but no Index() 
} 

public class AnotherController:BaseController 
{ 
    // again all except Index() 
} 
  1. 如果我们打个电话http://loclhost:666/My/Index派生类 控制器,但基类指数,将它正确使用视图派生类的 ?
  2. 如果这是不可能的,那么我们如何解决它,同时避免 重复所有具体控制器类的Index()?
+0

我可能无法正确理解问题,但;你可以使'Index'方法摘要:'public abstract ActionResult Index();'所以派生类必须实现它。 –

+0

你的伪代码在派生控制器中说:“一切都没有Index()”,但是你说“但派生类有索引视图定义” - 这有点令人困惑?我认为从你的问题,你的意见在伪代码是错误的,但这将是很好的澄清或更正... – Chris

+0

也难道你不是很容易测试如何工作?写一些适当的控制器,写一些测试视图,运行它,看看会发生什么...这是一个有趣的问题,但我一定会保留它并提交一个答案,但它只是让我觉得你可以很容易地测试它... – Chris

回答

2

是的,它可以这样工作。你的代码是正确的,ASP.NET MVC会考虑基类。

我用ASP.NET Core MVC成功测试过它。但是,您的代码中存在拼写错误:从您的lambda中移除“返回”。

public virtual ActionResult Index() => View(); 
+0

聪明地球......你让我了! –

+0

这不是我答案的目的。 ;-) –

相关问题