我知道,这些视图是即时编译的,但究竟是什么时候发生的?如果我没有弄错的话,第一次编译是在第一次请求时发生的。但是当我修改aspx / cshtml文件时会发生什么呢?
是否可以在不使用aspnet_compiler.exe的情况下以某种方式控制此行为?
我遇到的问题是我修改了我的控制器/视图模型并将它们作为单独的程序集加载。刷新页面时出现此错误:
传递到字典中的模型项的类型为“Test.Controllers.AController + IndexViewModel”,但此字典需要“Test.Controllers.AController + IndexViewModel”类型的模型项。 < / p>
这些模型之间的区别是程序集名称(此错误中未显示),因此我需要针对更新的viewmodel重新编译视图。
答案 0 :(得分:0)
在修改后的下一个请求中发生。
<小时/> 如果你的ASPX Views有代码隐藏,那么就会发生两步编译。首先,代码隐藏类被编译为项目的一部分,然后ASP.NET运行时创建另一个继承自预编译类的类。如果更改控制器以传递不同的模型类但不重新编译项目,则它将无法工作,因为预编译的类仍引用旧程序集中的类。
因此,如果使用代码隐藏,项目将编译一个继承自ViewPage<TModel>
的类,如果要更改TModel
,则必须重新编译项目。如果您不使用代码隐藏,则这不是问题,因为TModel
是在运行时确定的。