2016-04-25 16 views
0

我從主MVC項目(我們稱之爲Main)創建了一個單獨項目中的佈局視圖(讓我們稱之爲Shared),然後使用RazorGenerator編譯該視圖。當我在主任何MVC頁面使用的佈局正常工作:使用ActionFilter將編譯視圖(RazorGenerator)設置爲佈局

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

然而,當我使用一個ActionFilter這樣設置佈局:

public class LayoutAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     var viewResult = filterContext.Result as ViewResult; 
     viewResult.MasterName = "~/Views/Shared/_Layout.cshtml"; 
    } 
} 

,只需在控制器中使用它主要是這樣的:

[Layout] 
public class HomeController : Controller 
{ 
    // GET: Home 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

我得到這個錯誤:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Home/Index.cshtml ~/Views/Shared/Index.cshtml ~/Views/Home/Index.aspx ~/Views/Home/Index.ascx ~/Views/Shared/Index.aspx ~/Views/Shared/Index.ascx ~/Views/Shared/_Layout.cshtml

我真的很想使用內置到Shared項目中的ActionFilter,以便我可以在Main項目(或任何其他項目)中的任何控制器中使用它。

任何想法,爲什麼我得到這個錯誤?

+0

@jamiedanq它在那裏。就像我說的,當我直接從索引視圖使用Layout =「...」時,它就可以工作。當我刪除該行並使用ActionFilter時,我得到錯誤。 –

+0

錯過了那部分我的錯 – jamiedanq

+0

LayoutAttribute類是否與'佈局' – jamiedanq

回答

0

從此改變你的行動:

public class LayoutAttribute : ActionFilterAttribute 

    { 
     public override void OnActionExecuted(ActionExecutedContext filterContext) 
     { 
      base.OnActionExecuted(filterContext); 
      var viewResult = filterContext.Result as ViewResult; 
      viewResult.MasterName = "~/Views/Shared/_Layout.cshtml"; 
     } 
    } 

要在這之下:

public class LayoutAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     var viewResult = filterContext.Result as ViewResult; 
     if (viewResult != null) 
     { 
      viewResult.MasterName = "~/Views/Shared/_Layout.cshtml"; 
     } 
    } 
} 

希望有所幫助。

+0

仍然是同樣的錯誤。對於它的價值,我在原始實現中有條件,但是從我試圖用來查明錯誤原因的精簡版中刪除它。 –

+0

調試你的應用程序並設置一個斷點,看它是否以true或false結束if? –

+0

,你會設置'ActionResult'方法返回像'return View(「index」)這樣的索引來檢查是否有效 –