ASP.NET MVC何时在修改后重新编译视图?

时间:2011-12-19 14:54:18

标签: asp.net-mvc view compilation

我知道,这些视图是即时编译的,但究竟是什么时候发生的?如果我没有弄错的话,第一次编译是在第一次请求时发生的。但是当我修改aspx / cshtml文件时会发生什么呢?

是否可以在不使用aspnet_compiler.exe的情况下以某种方式控制此行为?

我遇到的问题是我修改了我的控制器/视图模型并将它们作为单独的程序集加载。刷新页面时出现此错误:

传递到字典中的模型项的类型为“Test.Controllers.AController + IndexViewModel”,但此字典需要“Test.Controllers.AController + IndexViewModel”类型的模型项。 < / p>

这些模型之间的区别是程序集名称(此错误中未显示),因此我需要针对更新的viewmodel重新编译视图。

1 个答案:

答案 0 :(得分:0)

在修改后的下一个请求中发生。

<小时/> 如果你的ASPX Views有代码隐藏,那么就会发生两步编译。首先,代码隐藏类被编译为项目的一部分,然后ASP.NET运行时创建另一个继承自预编译类的类。如果更改控制器以传递不同的模型类但不重新编译项目,则它将无法工作,因为预编译的类仍引用旧程序集中的类。

因此,如果使用代码隐藏,项目将编译一个继承自ViewPage<TModel>的类,如果要更改TModel,则必须重新编译项目。如果您不使用代码隐藏,则这不是问题,因为TModel是在运行时确定的。