12

ActionFilterAttribute次のように書いたカスタムでレイアウトパスを設定しようとしています:

public class LayoutInjecterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            result.MasterName = "~/Views/Layouts/Test.cshtml"
        }
    }
}

ここで、Test.cshtml はRazorGenerator、別のプロジェクトで (の助けを借りて) プリコンパイルされたビューです。

しかし、それは私にエラーを与えます:

ビュー「インデックス」またはそのマスターが見つからないか、検索された場所をサポートするビュー エンジンがありません。次の場所が検索されました: ~/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/Layouts/Test.cshtml

そしてコントローラーは実際には単純です:

[LayoutInjecter]
public class HomeController : Controller
{
    public ActionResult Index()
    {
       return View();
    }
}
4

3 に答える 3

4

できます。レイアウト パス"~/Views/Layouts/Test.cshtml"が正しいことを確認します。

また、「Test.cshtml」がビュー/部分ビューではなく、レイアウト ページであることを確認してください。

于 2015-11-25T08:03:34.497 に答える