为啥.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>

如果我将&lt;h1&gt; 中的文本更改为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 - 富页面编辑器在进行更改后不刷新

为啥刷新页面后没有检测到Vuex? (努努特)

php怎么不刷新页面更新数据.

为啥 spring-vaadin 忘记了我设置的 locale,但在页面刷新后突然记住了?

为啥读取 localStorage 值需要刷新页面才能显示由 jQuery 切换的 CSS 更改?

在下一个 js 中使用 webpack5 刷新不需要的页面