Tee*_*jay 5 c# asp.net-core razor-pages
我建立了一个简单的Razor Pages网站,以显示几个数据库表的一些视图。
在index.cshtml.cs我只是有:
public class IndexModel : PageModel
{
public IActionResult OnGet()
{
return RedirectToPage("./Registrations/Index");
}
}
Run Code Online (Sandbox Code Playgroud)
在Registrations/index.cshtml.cs我有:
public class IndexModel : PageModel
{
int pageSize = 30;
private readonly RegistrationAdmin.PostgresDbContext _context;
public IndexModel(RegistrationAdmin.PostgresDbContext context)
{
_context = context;
}
public PaginatedList<Registration> Registration { get; set; }
public async Task OnGetAsync(int pageIndex = 1)
{
IQueryable<Registration> registrations = _context.Registrations
.Include(r => r.ContactPerson)
.Include(r => r.Badge)
.OrderByDescending(r => r.RegistrationId);
this.Registration = await PaginatedList<Registration>.
CreateAsync(registrations.AsNoTracking(), pageIndex, pageSize);
}
}
Run Code Online (Sandbox Code Playgroud)
从Visual Studio测试网站很好,从项目目录运行dotnet run也可以。
因此,我通过以下方式部署了该网站:
dotnet publish -o ../Published/ -c release
然后dotnet MyWebsite.dll从发布目录运行它。
当我连接到http:// localhost:5000时,出现一般错误。
查看控制台,这是抛出的异常:
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: No page named './Registrations/Index' matches the supplied values.
at Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor.ExecuteAsync(ActionContext context, RedirectToPageResult result)
at Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResultAsync(ActionContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
Run Code Online (Sandbox Code Playgroud)
我无法理解已部署的版本出了什么问题。
根据错误消息,应用程序无法看到引用的视图。
默认情况下,发布时项目会预编译页面。
参考将 Razor Pages 应用程序发布并部署到 Windows 上的 IIS
虽然你已经表明你使用的是 mac
可以跳过此步骤并发布原始.cshtml 文件,从而生成可通过与 PHP、经典 ASP 或 ASP.NET 网页框架类似的方式更新的页面。换句话说,您可以对 .cshtml 文件进行更改,然后在应用程序运行时将其复制到 Web 服务器,新内容将立即生效。
如果您想采用此方法,请向.csproj
MvcCompileOnPublish文件添加一个 节点,并将值设置为:falseRun Code Online (Sandbox Code Playgroud)<PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish> </PropertyGroup>这将产生一个包含内容页面的 Pages 文件夹和一个包含应用程序所需的库的 refs 文件夹
使用上述方法,虽然更多的解决方法可以让您将缺少的视图复制到已发布的应用程序,并使其在发布时可供使用。
编辑:
所以最后看起来csproj文件存在问题,在发布时排除了页面。
我们能够通过禁用页面预编译来确认这一点,并在发布时看到有问题的页面没有被复制(考虑)。
清理csproj文件并重新编译解决了预编译和未编译的复制页面的问题。
它最初直接在项目中工作,因为项目运行时所有必需的文件都存在。
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |