簡體   English   中英

使用基本視圖的ASP.NET MVC繼承的控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM