Razor 将MVC3应用程序迁移到MVC4时出现问题:编译器错误消息:CS1513:}

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:

这是一个非常奇怪的错误,我想可能是剃须刀的错误。我使用的是VS2012,MVC4,框架4.5

遵循以下说明: 我创建了一个新的MVC4项目,然后将所有代码(控制器、视图、视图模型)从MVC3项目复制到它

一切都很顺利,直到我测试了一个视图,它有一个自定义帮助程序,其中有一个
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=是?“选中”:“今天我刚收到一个单选选项。