【问题标题】:View does not refresh after change更改后视图不刷新
【发布时间】:2016-05-07 05:45:27
【问题描述】:

我遇到了这个令人沮丧的问题。我在剃刀视图 (cshtml)、Start without Debugging 中更改文本,刷新 (Ctrl+F5) 浏览器但没有任何反应。奇怪的是,如果我修改控制器的返回值(比如return Ok("test");)或包含的静态文件(如 CSS),刷新,更改是可见的。只有当我每次都停止启动和停止调试时,剃刀视图才会更新。

以下是我已经尝试过的事情:

  • 确保选中Detect when file is changed outside the environment
  • On run, when projects are out of dateAlways build
  • 在 Edge、Chrome 和 Firefox 上进行了尝试,无论是否使用硬刷新。
  • 重新启动 Visual Studio 数字次。
  • 清洁/重建解决方案。
  • 在新模板项目上执行此操作。

附:我看到有很多类似的问题,但是没有一个答案似乎可以解决我的问题。

更新

这似乎是一个更大范围的问题。如果我:

  1. 在父视图中创建所需的剃须刀部分,如下所示@RenderSection("css", required: true)
  2. 未在子视图中实现渲染。
  3. 我(显然)得到了InvalidOperationException: The following sections have been defined but have not been rendered by the page at 'bla\bla\bla':css
  4. 然后我实现它。
  5. 保存,在 Firefox 中按 Ctrl+F5。错误仍然存​​在。

此时,VS 2015 几乎无法使用,因为你不知道,如果你真的遗漏了什么,或者是 VS 表现不佳

【问题讨论】:

  • 你开启缓存了吗?
  • 我已经关闭了浏览器中的缓存,并且总是使用 Ctrl+F5 强制重新加载,如果这就是你的意思的话。
  • 不,我说的是服务器上的缓存。动作方法有属性,或者您可以使用处理程序使服务器保持相同的响应。
  • 你能给我看一个简单的例子吗?

标签: c# asp.net-mvc razor visual-studio-2015


【解决方案1】:

我以前遇到过这个问题。 我的情况是我在 Macbook Pro 上运行 windows 10 VM Parallel,项目文件位于与 mac OS 的共享文件夹中。

如果有人和我有同样的情况,请将项目移动到非共享目录,例如 C:\ 将解决问题。

【讨论】:

  • 在 MacBook Pro 上以 Parallels 运行 Win10。这解决了我的问题。
  • 我的发现是,如果你打开一个终端窗口,然后切换到项目目录并使用 chmod 更改权限,它会起作用。使用:sudo chmod -R 777 *
  • 我在 Mac 上使用 Win10 Parallels,我的项目在 C:\ 中,我禁用了 Mac 和 Windows 之间的项目共享,但它仍然不适合我。
  • @smurf 今天仍在和我一起工作,我仍在使用 mac 进行并行的 .net 项目
【解决方案2】:

这似乎是在幕后发生的事情:.net 框架将您的剃须刀编译成机器形式 (DLL) 并执行它。然后它会监视您的 Web 文件夹以监视更改,当它检测到更改时,它会重新编译您的剃须刀并执行新的 DLL。

在您的情况下,与监视文件更改有关的某些事情似乎失败了。它仍然可以完全重新启动,因为即使没有文件更改检测也会进行编译。常见原因有:

  1. 您正在从网络(NAS 或文件共享)提供文件,这不允许您的电脑监控更改。这可能是缺少的功能(如非 SMB 文件共享)或权限问题。这在网络农场场景中很常见,但可能不是您的开发场景。
  2. 其他东西已经锁定了文件(权限?),这会阻止此监视挂钩保留文件。

要确认这是问题所在,我建议只编辑 web.config(添加/删除一个字符)并查看重新加载是否成功 - 只是为了证明这是一个重新编译问题而不是视觉工作室-调试问题。假设是这种情况,并且假设它不是 NAS,我建议暂时授予文件夹“所有人 - 一切”权限,看看它是否可以工作,然后逐渐将权限再次降低到您想要的位置。

【讨论】:

    【解决方案3】:

    检查您的web.config 并确保您没有fcnMode="Disabled"fcnMode="NotSet"

    使用

    <httpRuntime targetFramework="4.5.2" fcnMode="Default" />
    

    <httpRuntime targetFramework="4.5.2" fcnMode="Single" />
    
    • 默认 对于每个子目录,应用程序都会创建一个监视子目录的对象。这是默认行为。
    • 已禁用文件更改通知已禁用。
    • NotSet 未设置文件更改通知,因此应用程序创建了一个监控每个子目录的对象。这是默认设置 行为。
    • 单个应用程序创建一个对象来监控主目录并使用该对象来监控每个子目录。

    FcnMode Enumeration

    【讨论】:

    • 感谢您的发布 - 我现在可以恢复理智了!!!我在我的一个 MVC 网站上遇到了这个问题,这让我发疯了!!我注意到 fcnMode 属性。在 DDG 上进行了一些搜索后,我看到了您的回复。我正在使用共享文件夹在 Parallels Desktop VM 中运行 Win10。我正在运行的项目位于 UNC 路径上,例如 \\Mac\{DriveName}\... 对于运行类似环境的其他任何人 - 我必须将其更改为“默认”才能正常工作 - 即使这样我也有保存视图几次。
    • 对不起,我在哪里把这段代码放在web.config?? &lt;httpRuntime targetFramework="4.5.2" fcnMode="Single"/&gt;
    • 放入
    • 我也在 Parallels 中运行 Win10,但这并没有解决我的问题。不过,@dexcell 提供了上述答案。
    • 为什么说NotSetDefault都是默认行为?如果我根本没有设置属性,这是否意味着它不适合我?但是当我之前在我的web.config 中从来没有这个属性时,它确实发生了......
    【解决方案4】:

    在Parallel虚拟机上,在Macbook Pro上,如果项目文件在共享文件夹中,重新编译机制将不起作用; 复制文件夹到C盘,问题就解决了

    【讨论】:

    • 我花了很长时间才弄明白...谢谢!
    【解决方案5】:

    刚刚遇到同样的问题。在调试了很长时间并尝试了几乎所有方法后,我们发现有人在 Visual Studio 中将文件从一个文件夹移动到另一个文件夹并将其签入到 TFS。因此项目文件已更新,但原始文件仍存在于磁盘上。所以我的本地 IIS 在新位置呈现旧文件而不是新文件。

    这很令人沮丧,是的。

    【讨论】:

      【解决方案6】:

      如果您使用 Parallels WM 在 Mac 上运行并且您的项目位于您的 Mac 卷上,您可以使用 chmod 解决此问题。

      chmod -R 777 *
      

      【讨论】:

      • 警告:尝试此解决方案会导致 git 显示对每个文件的更改的巨大问题。不要尝试这是一个糟糕的解决方案。
      • 这是我的问题,我选择将文件夹移动到逻辑 Parallels VM 驱动器而不是更改权限 - 肯定已修复它,如果没有这个答案,我将无法解决
      • @jpro 不,如果您在 Windows 中使用 git .. 对我来说很好。
      【解决方案7】:

      有两种方法可以解决此问题:

      1。检查 .sln 文件所在文件夹的权限。文件访问权限可能存在问题,因为 Visual Studio 可能无法在 IIS Express 服务器运行时访问文件,因此每次需要反映新的 .cshtml 更改重启服务器,所以我建议通过以下方式编辑文件夹访问权限:

      右键文件夹->属性->安全->点击编辑按钮->勾选所有选项->保存

      重新启动 Visual Studio 以查看更改。

      如果这不起作用,请使用 2 选项。

      2。在您的项目中的 startup.cs 文件中,在方法中添加以下行 ConfigureServices()

      services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

      【讨论】:

      • @Ashu,此答案适用于 .net Core (2.2+)。不确定这是否仍然值得一票否决,因为 OP 的问题非常广泛(即使标签对于 .net Core 也是 somewhat 模棱两可的(Core 可以使用 C# 语言实现并具有 MVC 包) )。
      • 这个答案适用于我在 asp.net core 2.2 和 3.1 上的剃须刀页面(另一种解决方案是 MVC 站点和运行并行的 Mac)。
      • 我明白了。实际上我使用的是最新版本并且无法找到该功能,但经过研究发现它在其他版本中存在。尝试再次投票,但收到错误,答案必须现在编辑一次。
      • 对于 Razor 页面,docs.microsoft.com/en-us/aspnet/core/mvc/views/… 描述的方法效果更好
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多