我将MVC应用程序从MVC 3升级到5.2.2,现在我收到了这个错误。我使用新的项目向导创建了一个全新的MVC项目,这很有效,我在两个项目中比较了我的/web.config
和Views/web.config
文件,但没有看到任何看似重要的差异
在对象浏览器中查看,我发现HtmlHelper
和System.Web.WebPages
中定义了两个不同的System.Web.Mvc
对象,这似乎是相关的:
但我不确定如何处理这个事实。
答案 0 :(得分:6)
经过几个小时的摔跤,然后在这里发布问题,我一分钟后想出来了;我已经指定了一个强类型模型:
@ModelType IEnumerable(Of MyModel)
但是,在我升级到5.2.2的同一时间,我重新组织了我的命名空间,以便MyModel
位于不同的命名空间中,这导致了问题。解决方法是将其更改为:
@ModelType IEnumerable(Of NewNamespace.MyModel)
如果编译器发现了这一点会很好。我永远不会想到它根本找不到我的模型对象类型 ,但不会这么说。
答案 1 :(得分:0)
确保您的model
points to a real class,但这可能是因为MvcWebPageRazorHost
isn't registered或different versions are registered in the root web.config vs. the views web.config,通常是由updating MVC versions
每次打开Razor View时,我都会遇到几个编译器错误:
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'.
修复了更新web.config中的webpages:Version
的问题:
来自此:
<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>