【问题标题】:Embedded Razor layout cannot be located无法定位嵌入式 Razor 布局
【发布时间】:2019-12-31 13:35:59
【问题描述】:

我在 .NET core 3 中使用带有电子邮件模板的 Razor。

虽然我可以让这一切正常工作,但我想将我的模板文件(称为 EmailLayout.cshtml 并位于 /Pages/Shared/)更改为嵌入式资源。 每当我在 VS 中这样做时,我都会收到此错误:

InvalidOperationException:布局视图“EmailLayout”不能 位于。搜索了以下位置: /Views/EmailLayout.cshtml /Views/Shared/EmailLayout.cshtml /Pages/Shared/EmailLayout.cshtml

为什么找不到我的文件? 我应该添加什么才能使其正常工作?

【问题讨论】:

    标签: asp.net asp.net-core razor


    【解决方案1】:

    终于找到答案了。

    1) 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation nuget 包

    2) 将此添加到启动中的配置中:

    services.Configure<MvcRazorRuntimeCompilationOptions>(options => {
        options.FileProviders.Clear();
        options.FileProviders.Add(new EmbeddedFileProvider(appDirectory));
    });
    

    3) 将服务改为services.AddRazorPages().AddRazorRuntimeCompilation();

    【讨论】:

      【解决方案2】:

      确保文件的Build Action 在视图的properties 中设置为Content

      您可以按照步骤使用EmailLayout.cshtml

      1.创建布局视图:

      2.确保它在/Pages/Shared文件夹中:

      3.EmailLayout 应该是这样的:

      <!DOCTYPE html>
      <html>
      <head>
          <meta name="viewport" content="width=device-width" />
      </head>
      <body>
          <h2>EmailLayout</h2>
          <div>
              @RenderBody()
          </div>
      </body>
      </html>
      

      4.将以下代码添加到您的 Razor 页面或_ViewStart.cshtml

      @{    
          Layout = "EmailLayout";
      }
      

      【讨论】:

      • 当构建操作被标记为“内容”时一切正常。我想要的是将“构建操作”更改为嵌入式资源,但是当我这样做时,它再也找不到我的视图了。
      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多