5

我将我的 MVC 应用程序从 MVC 3 升级到 5.2.2,现在我收到了这个错误。我已经使用新项目向导创建了一个全新的 MVC 项目,并且这很有效,并且我已经比较了两个项目中的我的/web.configViews/web.config文件,并且没有发现任何看起来很重要的差异。

在对象浏览器中,我看到实际上在和中HtmlHelper定义了两个不同的对象,这似乎是相关的:System.Web.WebPagesSystem.Web.Mvc

在此处输入图像描述

但我不确定如何处理这个事实。

4

2 回答 2

7

在与这个问题搏斗了几个小时然后在这里发布问题之后,我在一分钟后想通了;我已经指定了一个像这样的强类型模型:

@ModelType IEnumerable(Of MyModel)

但是大约在我升级到 5.2.2 的同时,我重新组织了我的命名空间,使其MyModel位于不同的命名空间中,这导致了问题。解决方法是将其更改为:

@ModelType IEnumerable(Of NewNamespace.MyModel)

如果编译器能捕捉到这一点,那就太好了。我永远不会想到它根本找不到我的模型对象类型但不会这么说。

于 2014-09-25T11:21:28.893 回答
0

确保您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:Versionweb.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>
于 2016-12-22T14:03:19.547 回答