[英]ASP.NET MVC Inherited Controller using base view
我遇到了一個奇怪的問題,但我不確定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子類的其他內容覆蓋此視圖。
最簡單的方法是通過指定視圖的完整路徑在基類中明確顯示,如下所示:
public ActionResult AnAction(Object SomeModel)
{
//do stuff
return View("~/Views/Base/AnAction.cshtml",TemplateFromCode,ViewModel);
}
與其繼承基控制器,為什么不調用AnAction只是調用該控制器呢? 通常,控制器繼承用於內部詳細信息,而不是公共操作方法覆蓋。
否則,您會受制於DavidG的建議,因為視圖路徑是從已實現的控制器位置(而不是基本控制器)自動構建的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.