为啥.cshtml更改后刷新页面不更新
Posted
技术标签:
【中文标题】为啥.cshtml更改后刷新页面不更新【英文标题】:Why does page not update after refresh when .cshtml changes为什么.cshtml更改后刷新页面不更新 【发布时间】:2019-06-03 23:41:44 【问题描述】:我正在尝试Blazor
,但我不明白为什么在刷新浏览器页面后更改component
时它没有更新? client
不应该像angular
那样更新自身吗?
只有在我重新启动blazor
服务器时才会刷新。
Index.cshtml
@page "/"
<h1>Hello, world!</h1>
如果我将<h1>
中的文本更改为Hello people
,我会保存项目并刷新页面(正如我在Blazor
教程中所建议的那样)我不应该看到Hello people
吗?
【问题讨论】:
【参考方案1】:我猜你是在连接调试器的情况下运行应用程序?这可以防止重新编译。您需要:
Press Ctrl-F5 to run the app without the debugger. Running with the debugger (F5) isn't supported at this time.
https://github.com/dotnet/aspnetcore/issues/5456
【讨论】:
是的,我确实使用调试器运行它。 稍等一下,@Flores,你的意思是我可以通过按 Ctrl-F5 来运行应用程序,更新我的代码(当然不用关闭我的应用程序),保存更改,然后刷新页面,你瞧,我们的 Blazor 应用程序显示了更改。没门。这对我来说是新事物,保存项目,重新编译它(我不是在讽刺。我是认真的)。 @Bercovici Adrian,如果我在上面评论中的声明没有错,那么您可以在每次更新后按 Ctrl-F5(重新编译并运行您的应用程序),或者您可以构建或重建您的应用,然后按 F5。 调试器是否正在运行无关紧要 - Eureka anwer 是正确的。 在 VS2019 中这仍然不起作用。在 MVC 中这工作得很好,那么我们是否必须在这里退一步开发人员体验?【参考方案2】:如果您进入工具 > 选项 > 键盘并在“显示包含的命令”搜索框中搜索“BrowserLink”。找到显示“OtherContextMenus.BrowserLink.RefreshLinkedBrowsers”的选项,默认设置为 CTRL+Alt+Enter。单击“删除”,然后选择“按快捷键”输入,然后按 Ctrl+S。接下来(就在输入的左侧)更改使用“全局”中的新快捷方式为“文本编辑器”。单击“确定”直到窗口关闭。现在 Visual Studio 与保存文件和刷新链接浏览器共享 CTRL+S。
(仅当编辑窗口中的文本编辑器 .cshtml、.css、.js 等文件是活动选择时才有效)警告:如果您没有将其设置为全局以外的其他内容,那么它将覆盖保存的快捷方式,您将无法保存文件。
【讨论】:
【参考方案3】:在 Asp.net Core 3.0 之后,使用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包启用运行时编译。 要启用运行时编译,应用必须:
安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
NuGet 包。
更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用:
services
.AddControllersWithViews()
.AddRazorRuntimeCompilation();
或
services.AddMvc().AddRazorRuntimeCompilation();
【讨论】:
这适用于 Web 应用程序(而不是在调试中)。它不适用于在引用的 razor 库中对文件所做的更改。 您也可以将.AddRazorRuntimeCompilation();
添加到services.AddRazorPages()
上,而不是services.AddControllersWithViews()
或services.AddMvc()
。
开启/关闭此功能是否会影响性能?如果在生产环境中关闭此功能但在开发环境中启用,会有什么不同吗?
Razor 运行时编译是 MVC 功能,不是受支持的 Blazor 功能。 github.com/dotnet/aspnetcore/issues/16915
这行得通……但我必须加载一个组件才能做一些“标准”的事情,这完全是蹩脚的。【参考方案4】:
您应该在 razor 页面中添加或启用运行时编译,
安装包 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation -Version 3.1.6
安装后设置启动文件为,
services.AddMvc().AddRazorRuntimeCompilation();
【讨论】:
Intellisense 没有建议安装哪个包,+1 来自我【参考方案5】:执行以下操作:
从 NuGet 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。
更新 Startup 类中的 ConfigureServices 方法,如下所示:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
-
你很高兴。
【讨论】:
以上是关于为啥.cshtml更改后刷新页面不更新的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight 6.1 - 富页面编辑器在进行更改后不刷新
为啥 spring-vaadin 忘记了我设置的 locale,但在页面刷新后突然记住了?