レイアウトビューをメイン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を使用して、メインプロジェクト(または他のいずれか)のコントローラで使用できるようにしたいと思います。
なぜこのエラーが発生するのですか?
@jamiedanqありがとうございます。私が言ったように、私はLayout = "..."をIndexビューから直接使うと動作します。その行を削除して代わりにActionFilterを使用すると、エラーが発生します。 –
その部分が私の間違っていました – jamiedanq
LayoutAttributeクラスは 'Layout'と同じプロジェクトにありますか – jamiedanq