2016-04-25 15 views
0

レイアウトビューをメインMVCプロジェクト(別名メイン)から別のプロジェクト(共有と呼ぶ)に作成し、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"; 
    } 
} 

単にコントローラ内でそれを使用しますこのようなメイン:

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

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

私はこのエラーを取得します

共有プロジェクトに組み込まれたActionFilterを使用して、メインプロジェクト(または他のいずれか)のコントローラで使用できるようにしたいと思います。

なぜこのエラーが発生するのですか?

+0

@jamiedanqありがとうございます。私が言ったように、私はLayout = "..."をIndexビューから直接使うと動作します。その行を削除して代わりにActionFilterを使用すると、エラーが発生します。 –

+0

その部分が私の間違っていました – jamiedanq

+0

LayoutAttributeクラスは 'Layout'と同じプロジェクトにありますか – 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で終了するかどうかを確認します。 –

+0

と '戻り値View(" index ")のようなインデックスを返す' ActionResult'メソッドを設定してください。 –