我将我的 MVC 应用程序从 MVC 3 升级到 5.2.2,现在我收到了这个错误。我已经使用新项目向导创建了一个全新的 MVC 项目,并且这很有效,并且我已经比较了两个项目中的我的/web.config
和Views/web.config
文件,并且没有发现任何看起来很重要的差异。
在对象浏览器中,我看到实际上在和中HtmlHelper
定义了两个不同的对象,这似乎是相关的:System.Web.WebPages
System.Web.Mvc
但我不确定如何处理这个事实。
我将我的 MVC 应用程序从 MVC 3 升级到 5.2.2,现在我收到了这个错误。我已经使用新项目向导创建了一个全新的 MVC 项目,并且这很有效,并且我已经比较了两个项目中的我的/web.config
和Views/web.config
文件,并且没有发现任何看起来很重要的差异。
在对象浏览器中,我看到实际上在和中HtmlHelper
定义了两个不同的对象,这似乎是相关的:System.Web.WebPages
System.Web.Mvc
但我不确定如何处理这个事实。
在与这个问题搏斗了几个小时然后在这里发布问题之后,我在一分钟后想通了;我已经指定了一个像这样的强类型模型:
@ModelType IEnumerable(Of MyModel)
但是大约在我升级到 5.2.2 的同时,我重新组织了我的命名空间,使其MyModel
位于不同的命名空间中,这导致了问题。解决方法是将其更改为:
@ModelType IEnumerable(Of NewNamespace.MyModel)
如果编译器能捕捉到这一点,那就太好了。我永远不会想到它根本找不到我的模型对象类型,但不会这么说。
确保您model
指向一个真实的类,但这可能是因为MvcWebPageRazorHost
未注册或在根 web.config 与视图 web.config 中注册了不同的版本,这通常是由更新 MVC 版本引起的
每当我打开 Razor 视图时,都会遇到几个编译器错误:
Type 'System.Web.Mvc.WebViewPage' is not defined.
'Context' is not declared. It may be inaccessible due to its protection level.
sub 'Execute' cannot be declared 'Overrides' because it does not override a sub in a base class.
'Html' is ambiguous, imported from the namespaces or types 'System.Web.WebPages, System.Web.Mvc'.
修复它的是更新webpages:Version
web.config 中的:
从此:
<add key="webpages:Version" value="2.0.0.0" />
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
对此:
<add key="webpages:Version" value="3.0.0.0" />
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>