我已将我的项目从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
有什么想法吗?
答案 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。这只是一个例子,但长期和短期是你对于你传递的参数以及它们的类型不够明确。