最近遇到一个奇葩的问题,在vs2013下cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等),在视图中也没有智能提示了,用@model声明视图的model类型也不可以,直接复制过去还会把model类给自动变成小写!!!。这个问题纠结了我一晚上。
网上出现的资料目前无非有以下几种方法(试了一下,都不管用):
1、检查项目根目录的web.config和Views文件下的web.config的mvc和razor版本信息是否一致。
2、重新新建一个mvc项目把对应正确的web.config拷贝过来。
3、安装vs2015(代价太大,不建议!)
4、用nuget重新安装一下ASP.NET MVC。
出现的错误如下:
错误 2 当前上下文中不存在名称“model” e:Stuffprojects蓝狐软件工作室srcLanhu.AdminViewsStudentIndex.cshtml 3 2 Lanhu.Admin
错误 7 “System.Web.WebPages.Html.HtmlHelper”不包含“BeginForm”的定义,并且找不到可接受类型为“System.Web.WebPages.Html.HtmlHelper”的第一个参数的扩展方法“BeginForm”(是否缺少 using 指令或程序集引用?) e:Stuffprojects蓝狐软件工作室srcLanhu.AdminViewsStudentIndex.cshtml 12 26 Lanhu.Admin
错误 9 当前上下文中不存在名称“ViewBag” e:Stuffprojects蓝狐软件工作室srcLanhu.AdminViewsStudentIndex.cshtml 16 115 Lanhu.Admin
错误 11 当前上下文中不存在名称“Url” e:Stuffprojects蓝狐软件工作室srcLanhu.AdminViewsStudentIndex.cshtml 48 47 Lanhu.Admin
错误 12 “System.Web.WebPages.Html.HtmlHelper”不包含“BeginForm”的定义,并且找不到可接受类型为“System.Web.WebPages.Html.HtmlHelper”的第一个参数的扩展方法“BeginForm”(是否缺少 using 指令或程序集引用?) e:Stuffprojects蓝狐软件工作室srcLanhu.AdminViewsStudentIndex.cshtml 49 50 Lanhu.Admin
如下图:
后来,我打开其他的项目,又正常。仔细对比了一下不报错的项目使用的ASP.NET MVC版本是5.0.0.0而现在报错是ASP.NET MVC5.2.2.0
这个报错的MVC5.2.2.0项目是从公司的电脑拷贝回来的(也是vs2013),这就奇怪了为什么会报错呢?智能提示也管用,虽然能够正常的运行,但是很不方便。于是我灵机一动,难道是vs版本的问题?
于是我对比了两者的vs版本。
自己家的vs版本如下:
公司的vs版本如下:
可以看到公司的vs2013是Update 4了,而家里的vs2013是REL版。这让我猜想可能是vs2013bug引起的,于是我试着把家里的vs版本也升级。
vs菜单“工具”=》“扩展和更新”
把vs2013更新下载到本地,然后安装。
勾选同意,点击安装
上面过程时间有点长,要等久一点,你可以现在泡一杯茶,坐等安装完成。
vs2013 update5安装完成之后,提示要重启电脑,然后重新打开vs2013,奇迹般的问题消失不了。