Razor 将MVC3应用程序迁移到MVC4时出现问题:编译器错误消息:CS1513:}
这是一个非常奇怪的错误,我想可能是剃须刀的错误。我使用的是VS2012,MVC4,框架4.5 遵循以下说明: 我创建了一个新的MVC4项目,然后将所有代码(控制器、视图、视图模型)从MVC3项目复制到它 一切都很顺利,直到我测试了一个视图,它有一个自定义帮助程序,其中有一个Razor 将MVC3应用程序迁移到MVC4时出现问题:编译器错误消息:CS1513:},razor,asp.net-mvc-4,Razor,Asp.net Mvc 4,这是一个非常奇怪的错误,我想可能是剃须刀的错误。我使用的是VS2012,MVC4,框架4.5 遵循以下说明: 我创建了一个新的MVC4项目,然后将所有代码(控制器、视图、视图模型)从MVC3项目复制到它 一切都很顺利,直到我测试了一个视图,它有一个自定义帮助程序,其中有一个foreach,一个开关,三个if语句,然后我在其中调用了一些其他自定义帮助程序 这两个项目中的代码完全相同,在MVC3中可以工作,但在MVC4中显示以下消息: Compiler Error Message: CS1513:
foreach
,一个开关
,三个if
语句,然后我在其中调用了一些其他自定义帮助程序
这两个项目中的代码完全相同,在MVC3中可以工作,但在MVC4中显示以下消息:
Compiler Error Message: CS1513: } expected
所以我尝试添加一个花括号,但它显示了相同的错误,所以我不断添加括号,它不会停止告诉我同样的事情
我在谷歌上搜索了这个问题,但我发现这个问题没有答案:
有人遇到过此问题吗?尝试在web.config中添加此行
<compilation debug="true" batch="false">
现在,当得到错误时,您应该能够打开临时生成的.cs文件并查看生成的代码
也许那时你会更容易发现问题
有关详细信息,请查看此处这可能是一个很长的过程,但有时如果使用关键字,则会导致该错误 关键词列表VS 2012 我知道有两个新关键字是wait和async for 4.5 下面是我所说的例子
解决其中6/10问题最有帮助的方法是VS2012 文件->源代码管理->高级->格式化此文档 这将解决任何未关闭的div、条件语句,甚至ul和li的语句,这些语句会给.net带来很大的错误 我也遇到了这个“预期的”问题,而罪魁祸首原来是HTML评论中的一个撇号 下面是一个关于如何在VS 2012的默认MVC 4应用程序中重现此问题的示例。只需在default.cshtml中的@section{}中添加以下带有撇号的注释。从注释中删除撇号,它就可以正常工作了
@section featured {
<!-- hello world it's not cool -->
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<p>...</p>
</div>
</section>
}
@栏目特色{
@ViewBag.Title。
@查看包。留言
}
我也有同样的问题
在Razor MVC3中,我是这样访问变量的:@vSuggestion,但在MVC4中,@是不必要的
在我的示例中,我在MVC3中使用了以下代码:
@{
var vSuggestion = ((dynamic)ViewData["suggestion"]);
}
<!-- more code here -->
@{ int suggestion = @vSuggestion;
switch (suggestion)
{
case Suggestion.INCORRECT_PASSWORD:
case Suggestion.USER_ALREADY_IN_DATABASE:
<span>Trata de iniciar sesión de nuevo</span><br />
<span>Recupera tu contraseña @Html.ActionLink("aquí", "Recover", "Account")</span>
break;
case Suggestion.EMAIL_DONT_EXISTS:
<span>Comprueba que el correo electrónico está bien escrito</span><br />
<span>Registrate (abajo)</span>
break;
}
}
@{
var vSuggestion=((动态)视图数据[“建议]);
}
@{int suggestion=@vSuggestion;
开关(建议)
{
案例建议。密码不正确:
案例建议。用户\u已\u在\u数据库中:
新埃沃酒店
recepera tu contraseña@Html.ActionLink(“aqí”、“Recover”、“Account”)
打破
案例建议。电子邮件不存在:
电力公司的综合预算
注册(abajo)
打破
}
}
在MVC4中,Razor没有捕获switch语句中的第一个花括号。因此,我删除了@from@vSuggestion并正确地解析了代码
希望有帮助。MVC4的Razor解析器与MVC3不同。 RazorV3具有高级解析器功能,另一方面,与MVC3相比,它具有严格的解析功能 如果未正确使用razor语法,则在将MVC3转换为MVC4时,视图中可能会出现语法错误 razor v2中不允许的一些常见razor代码错误的解决方案包括: -->避免在视图中使用服务器块,除非有变量声明部分
Don’t : @{if(check){body}}
Recommended : @if(check){body}
-->当您已经在服务器范围内时,请避免使用@
Don’t : @if(@variable)
Recommended : @if(variable)
Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }
我经历了这个错误,但将其缩小为缺少的斜杠以关闭标记。这在MVC3中起作用:
@helper metatags()
{
<meta charset="utf-8">
}
@helper元标记()
{
}
但不是在MVC4中。它要求:
@helper metatags()
{
<meta charset="utf-8" />
}
@helper元标记()
{
}
在没有看到代码的情况下,您似乎丢失了分号或右大括号?我很确定我没有丢失任何东西。如果我遗漏了什么,为什么它可以在MVC3上工作而不能在MVC4上工作,razor的规范有什么变化吗?给我们看看代码!这很可能是您的Razor语法有问题,可能是您复制和粘贴时意外引入的错误。更可能的是,该错误是以前没有发现过的-即,新编译器比旧编译器更正确。我用代码更新了我的问题,感谢您的帮助!谢谢Hector,在我无法解决问题的那一刻,我删除了我所有的razor和javascript注释(我没有任何html注释),没有任何效果。然后我删除了我所有的javascript(我在那里有一些撇号),但同样没有任何效果。目前我没有时间进行更多的测试,所以我会将我的应用程序保留在MVC3中。但如果我找到什么,我会告诉你的!非常感谢。值得注意的是,如果注释包含撇号且不在@section内,则不会生成错误消息,但在运行时仍会出错,包括(但不一定限于)解析~/path/to/your/file URL。哇,如果今天出现同样的问题,我绝不会猜到原因。谢谢谢谢,该死的,这很难找到。我的代码库也没那么大。他们真的应该修复这些错误消息。谢谢我同意!“}expected”不会告诉我去哪里解决问题!仅将其缩小到文件范围是不够的。这是什么,70年代?谢谢!为什么微软在升级到MVC4的文档中没有提醒我们如何处理Razor语法问题——特别是因为它们很难找到?谢谢,@Model=>Model,真的帮助了我!!哇,太可怕了<代码>var@checked=是?“选中”:“今天我刚收到一个单选选项。