未编译的部分视图不会从ViewImport继承

时间:2019-05-31 08:28:31

标签: c# asp.net-core razor-pages asp.net-core-2.2

我将视图的一部分移到了局部视图。


_ViewImports.cshtml

@using AsonCore.Helpers
@using AsonCore.Models
@namespace AsonCore.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Application.cshtml

@page
@model ApplicationModel

<partial name="/Pages/Partial/_ApplicationPartial.cshtml" />

_ApplicationPartial.cshtml

@model ApplicationModel
<section class="content application">
    <div>
        <form method="post" enctype="multipart/form-data">
            <div>
                <label asp-for='email.Firstname'>FORNAVN</label>
                <input asp-for='email.Firstname' required />
            </div>
            <div>
                <label asp-for="email.Lastname">ETTERNAVN</label>
                <input asp-for="email.Lastname" required />
            </div>
            <div>
                <input type="submit" value="Send" />
            </div>
        </form>
        <partial name="/Pages/Shared/_FormScript.cshtml" />
    </div>
</section>

_Project.csproj

<ItemGroup>
  <Content Remove="Pages\Partial\**" />
</ItemGroup>

<ItemGroup>
  <None Include="Pages\Partial\**">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

在构建时,我排除了局部视图以实现其内容的动态更新,当我这样做时,最初从_ViewImports.cshtml继承的视图就停止了。

通过将@namespace AsonCore.Pages添加到部分视图中,它获得了Model,但是随后我注意到,在部署到服务器后(尽管它在VS2019中有效),“ TagHelpers”停止了工作。

添加@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 可能会解决修复了该问题,但是我的问题是,这是需要/应该如何做?

1 个答案:

答案 0 :(得分:2)

我将此自我解答发布为一种临时解决方法(尽管仍然有人希望,它将在官方资源/文档中解释发生了什么以及在哪里找到它)。


似乎它不比编译局部视图复杂,它使用编译的_ViewImports.cshtml,对于任何未编译的视图,都需要在其默认位置{{ 1}}文件夹。

就我而言,像这样

_ViewImports.cshtml

事实证明,一个人可以获取任何其他已编译的主视图文件(与部分视图一样,在发布时未将其删除),将其复制到Pages\文件夹中,然后对其进行编辑一个想要的文件,它将重新加载并覆盖位于 views.dll

中的已编译文件

虽然上面的内容本身会呈现异常(当试图在运行时执行未编译的视图时),但是在此答案的帮助下它会起作用,它表示:

  

要解决此问题,您必须发布文件夹,添加 refs 子文件夹   一些运行时程序集。如果您这样做,通常会创建此 refs 文件夹   将\Pages\Partial\ _Application.cshtml \Pages\ _ViewImports.cshtml \ AsonCore.Views.dll 设置为Pages\的项目。那么你   必须一次完成发布而无需预编译到另一个文件夹,并且   从此处复制此 refs 子文件夹。

注意,除了在Core 2.2中使用此 refs 文件夹外,还有其他方法,如果有人知道的话,请随时用此编辑我的答案