gpt4 book ai didi

c# - 未编译的局部 View 不继承自 ViewImports

转载 作者:可可西里 更新时间:2023-11-01 03:11:17 24 4
gpt4 key购买 nike

我将 View 的一部分移动到局部 View 中。


_ViewImports.cshtml

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

应用程序.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

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<RootNamespace>AsonCore</RootNamespace>
</PropertyGroup>

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

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

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
</ItemGroup>

</Project>

在构建时,部分 View 从已编译的 views.dll 中删除,以启用其内容的动态更新,当我这样做时,最初继承自 _ViewImports.cshtml 停止了。

通过将 @namespace AsonCore.Pages 添加到局部 View 中,它选择了 Model,但后来我注意到,在部署到服务器之后(尽管它在 VS2019 中工作) ,“TagHelpers”停止工作。

同时在 View 中添加 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 解决了这个问题,但我的问题是,这是需要/应该如何完成的吗?

或者是否有任何其他方法可以防止编译特定 View ,其中保留了“ViewImports”的继承?

最佳答案

我将这个 self 回答作为一种临时解决方法发布(尽管仍然希望有一个,它会解释发生了什么,以及在官方资源/文档中的何处可以找到它)。


看起来它并不比编译的局部 View 复杂,它使用编译的 _ViewImports.cshtml ,对于任何未编译的,它都需要 _ViewImports.cshtml 的副本在其默认位置,Pages\文件夹。

在我的例子中是这样的

\Pages\Partial\
_Application.cshtml

\Pages\
_ViewImports.cshtml

\
AsonCore.Views.dll

事实证明,可以将任何其他已编译的主视图文件(在发布时未删除,就像我对部分 View 所做的那样),将其复制到 Pages\文件夹,如果需要编辑它,它会重新加载并覆盖编译后的文件,它位于 views.dll


虽然上面单独会呈现一个异常(当试图在运行时执行未编译的 View 时),但是在这个答案的帮助下它起作用了,它说:

To correct this, you must to publish folder add refs subfolder with some runtime assemblies. This refs folder is normaly created if you do publish project with MvcRazorCompileOnPublish set to false. So you must one time do publish without precompilation to another folder and copy this refs subfolder from there.

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


编辑 - ASP.NET Core 3.1

说到 refs使用 3.1 的文件夹,只需执行此操作即可在发布时复制运行时文件:

startup

services.AddRazorPages()
.AddRazorRuntimeCompilation();

.csproj文件

<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.4" />

关于c# - 未编译的局部 View 不继承自 ViewImports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com