2017-07-31 34 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

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

相關問題