LGS*_*Son 15 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
Run Code Online (Sandbox Code Playgroud)
Application.cshtml
@page
@model ApplicationModel
<partial name="/Pages/Partial/_ApplicationPartial.cshtml" />
Run Code Online (Sandbox Code Playgroud)
_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>
Run Code Online (Sandbox Code Playgroud)
_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>
Run Code Online (Sandbox Code Playgroud)
在构建时,从已编译的views.dll中删除了部分视图,以实现其内容的动态更新,而当我这样做时,最初从中继承的内容就_ViewImports.cshtml
停止了。
通过添加@namespace AsonCore.Pages
到局部视图,它拾取了Model
,但是随后我注意到,在部署到服务器后(尽管它在VS2019中有效),“ TagHelpers”停止了工作。
还添加@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
了固定的观点,但我的问题是,这是需要/应该如何做的?
还是有其他方法可以防止编译特定视图,而保留“ ViewImports”的继承?
我发布这个自我回答作为一种临时解决方法(不过仍然希望有一个,这将解释发生了什么,以及在官方资源/文档中哪里可以找到它)。
看起来它并不比已编译的部分视图更复杂,它使用已编译的,对于任何未编译的,它需要在其默认位置(文件夹)中_ViewImports.cshtml
复制。_ViewImports.cshtml
Pages\
就我而言,是这样的
\Pages\Partial\
_Application.cshtml
\Pages\
_ViewImports.cshtml
\
AsonCore.Views.dll
Run Code Online (Sandbox Code Playgroud)
事实证明,人们可以采用任何其他已编译的主视图文件(在发布时没有删除它,就像我对部分视图所做的那样),将其复制到文件夹中,Pages\
如果需要的话进行编辑,然后它将重新加载并覆盖驻留在views.dll中的已编译版本
尽管上面的内容会呈现异常(当尝试在运行时执行未编译的视图时),但在这个答案的帮助下它可以工作,其中说:
要更正此问题,您必须向发布文件夹添加包含一些运行时程序集的refs子文件夹。如果您确实将项目发布为 ,则通常会创建此refs文件夹。因此,您必须一次在没有预编译的情况下发布到另一个文件夹,并从那里复制此refs 子文件夹。
MvcRazorCompileOnPublish
false
请注意,除了在 Core 2.2 中使用此refs文件夹之外,可能还有其他方法,如果有人知道,请随时编辑我的答案
编辑 - ASP.NET Core 3.1
当涉及到refs
使用 3.1 的文件夹时,只需执行以下操作即可在发布时复制运行时文件:
在startup
班上
services.AddRazorPages()
.AddRazorRuntimeCompilation();
Run Code Online (Sandbox Code Playgroud)
在.csproj
文件中
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.4" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
448 次 |
最近记录: |