更改后视图不会刷新

时间:2016-01-29 13:09:59

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

我遇到了这个令人沮丧的问题。我在剃刀视图(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数字时间。
  • 清洁/重建解决方案。
  • 在新模板项目上执行此操作。

P.S。我看到有很多类似的问题,然而,没有一个答案可以解决我的问题。

更新

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

  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。错误仍然存​​在。
  6. 此时,VS 2015实际上无法使用,因为你不知道,如果你真的错过了某些东西,或者它的VS代理

7 个答案:

答案 0 :(得分:12)

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

如果某人有像我一样的案例,将项目移动到非共享目录(例如C:\)将解决问题。

答案 1 :(得分:5)

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

使用

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

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

FcnMode Enumeration

答案 2 :(得分:4)

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

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

  1. 您正在提供来自网络(NAS或文件共享)的文件,这些文件不允许您的电脑监控更改。这可能是缺少的功能(如非SMB文件共享)或权限问题。这在Web场方案中非常常见,但可能不是您的开发方案。
  2. 其他东西已经锁定文件(权限?),这会阻止此监视挂钩保留文件。
  3. 为了确认这是问题,我建议只编辑web.config(添加/删除一个字符)然后看看重新加载是否成功 - 只是为了证明它是一个重新编译问题而不是一个visual-studio - 调试问题。假设是这种情况,并假设它不是NAS,我建议暂时给该文件夹一个“everyone - everything”权限,看它是否有效,然后再逐渐将权限再次降低到你想要的位置。

答案 3 :(得分:1)

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

chmod -R 777 *

答案 4 :(得分:0)

刚刚遇到同样的问题。经过长时间调试并尝试几乎所有内容后,我们发现有人在Visual Studio中将文件从一个文件夹移动到另一个文件夹并检查到TFS。所以项目文件已更新,但原始文件仍存在于磁盘上。所以我的本地IIS渲染了旧文件而不是新位置的新文件。

这很令人沮丧,是的。

答案 5 :(得分:0)

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

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

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

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

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

2 。在您的项目的 startup.cs 文件中,将其添加到方法中的 ConfigureServices()行下面:

  

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

答案 6 :(得分:0)

在并行虚拟机上,在Macbook Pro上,如果项目文件位于共享文件夹中,则重新编译机制将不起作用; 将文件夹复制到驱动器C即可解决问题