2011-12-19 79 views
0

我知道,这些视图是即时编译的,但是到底发生了什么?如果我没有弄错,第一次编译会在第一次请求时发生。但是当我修改aspx/cshtml文件时,会发生什么?修改它们后,ASP.NET MVC何时重新编译视图?

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

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

传入字典的模型项目类型为'Test.Controllers.AController + IndexViewModel',但此字典需要类型为'Test.Controllers.AController + IndexViewModel”。

这些模型之间的区别是程序集名称(在这个错误中没有显示),所以我需要重新编译视图对我更新的viewmodel。

回答

0

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


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

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

+0

请问您可以扩展它吗?我更新了我的问题以提供更多信息。 – ionoy 2011-12-19 15:08:08

+0

@ionoy我猜你正在使用一个web应用程序项目,你需要重新编译你的项目。 – 2011-12-19 15:16:29

+0

我明白了,我可以重新编译整个项目。但我需要的是在运行时针对更新后的视图模型重新编译视图。 – ionoy 2011-12-19 15:27:20