MVC 5迁移问题

时间:2014-02-04 04:50:44

标签: asp.net-mvc asp.net-mvc-migration asp.net-mvc-5.1

我已将我的项目从MVC 4.0迁移到MVC 5.1。我已经按照这里提到的所有步骤进行了操作 http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

我已经安装了Vs 2013 SP1。

我的项目编译没有任何问题,并按预期运行。但是,当我打开任何.cshtml文件时,我看到以下错误

The type arguments for method 'System.Web.Mvc.Html.DisplayExtensions.DisplayFor<TModel,TValue>(System.Web.Mvc.HtmlHelper<TModel>, 
  System.Linq.Expressions.Expression<System.Func<TModel,TValue>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我尝试了以下链接,没有运气。

MVC 5 -> MVC 5.1 Migration. Intellisense issues

mvc 3 to mvc 5 migration razor syntax issue

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案。但真的不确定这是否是造成这个问题的原因。当我查看web.config文件时,所有dependentAssembly旧版本都以0.0.0.0开头。当我创建一个全新的MVC 5项目时,该部分以1.0.0.0开头,当我更改它们时,上面提到的错误消失了。

但我仍然不相信这个解决方案,如果有人找到根本原因它会帮助我们。

<dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>

答案 1 :(得分:0)

所有这些意味着您将不明确的参数传递给DisplayFor。特别是有一个覆盖接受String作为第二个参数,在这种情况下,它是一个应该用于渲染它的模板的名称,或者它可以将Object作为第二个参数在这种情况下,它是应该传递给默认模板的额外视图数据。

如果您执行的操作类似于传递来自ViewBag的“字符串”,例如:

@Html.DisplayFor(m => m.Something, ViewBag.UseThisTemplate)

您实际上是在传递对象,因为未键入ViewBag。这只是一个例子,但长期和短期是你对于你传递的参数以及它们的类型不够明确。