Исключение .NET Core PartialAsync после развертывания - PullRequest
0 голосов
/ 24 апреля 2018

Я создал новое приложение .NET Core MVC с последней версией Visual Studio 2017. Затем я добавил новое представление в общую папку и на него ссылаюсь следующим образом:

@await Html.PartialAsync("MyNewView")

Это прекрасно работает в разработке и на моем локальном IIS.

Изменив его на это (также скопировал View в указанной папке):

@await Html.PartialAsync("../Account/MyNewView")

Дает мне исключение, подобное этому:

InvalidOperationException: частичное представление '../Account/MyNewView' не было найдено.

Этот работает только в Visual Studio, но не в моем IIS (развертывание файлов).

Полагаю, это как-то связано с предварительно скомпилированными представлениями. Есть ли обходной путь для этого?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

На ссылки ссылаются по соглашению, поэтому, когда у вас есть что-то вроде "MyNewView" Razor преобразует это в ~/Views/[Controller]/MyNewView.cshtml.Если у вас есть представление в другом каталоге, отличном от соглашения, вам нужно указать полный проект -относительный путь, а не просто Views относительный каталог.Другими словами: "~/Views/Accounts/MyNewView".

Razor также будет искать Views/Shared по соглашению, поэтому, если у вас есть представление, на которое нужно ссылаться в нескольких различных каталогах представлений контроллера, лучше поместить его туда.Затем вы можете просто ссылаться на "MyNewView" независимо от того, в каком контексте контроллера вы находитесь, и он все равно будет работать.

0 голосов
/ 24 апреля 2018

Я нашел обходной путь для этого, но, возможно, есть лучший способ (мне нравятся предварительно скомпилированные представления):

Я отредактировал файл csproj и добавил это:

<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>

Вотполный файл csproj для справки:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.3" />
  </ItemGroup>
</Project>
...