【问题标题】: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 吗?

【问题讨论】:

    标签: asp.net-core client-side blazor


    【解决方案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】:

      执行以下操作:

      1. 从 NuGet 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。

      2. 更新 Startup 类中的 ConfigureServices 方法,如下所示:

      services.AddControllersWithViews().AddRazorRuntimeCompilation();

      1. 你很高兴。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-15
        • 2012-02-08
        • 2019-05-07
        • 2016-04-07
        • 2011-04-08
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多