问题将MVC3应用程序迁移到MVC4:编译器错误消息:CS1513:}预期

mar*_*nda 13 razor asp.net-mvc-4

这是一个非常奇怪的错误,我认为它可能是一个剃刀错误.我正在使用VS 2012,MVC4,Framework 4.5.

按照这些说明:http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 我创建了一个新的MVC4项目,然后我从MVC3项目中复制了我的所有代码(控制器,视图,视图模型).

Eveything工作得很好,直到我测试了一个有自定义助手的View,里面有一个foreach,一个switch,三个if语句,然后我也调用了其他一些自定义助手.

这两个项目中的代码完全相同,在MVC3中它可以工作,但在MVC4中它显示了这条消息:

Compiler Error Message: CS1513: } expected
Run Code Online (Sandbox Code Playgroud)

所以我尝试添加一个花括号,但它显示相同的错误,所以我不断添加括号,它不会停止告诉我同样的事情.

我用谷歌搜索了这个问题,但我发现这个问题没有答案:http: //www.1771.in/asp-net-mvc-4-issues-migrating-mvc3-view-in-vs-2012-rc.html

有没有人遇到过这个问题?

Dhr*_*har 21

MVC4的Razor解析器与MVC3不同.Razor v3具有高级解析器功能,另一方面严格解析与MVC3相比.

如果您没有以正确的方式使用razor语法,则在将MVC3转换为MVC4时可能会在视图中遇到语法错误.

解决Razor v2中不允许的一些常见剃刀代码错误:

- >除非存在变量声明部分,否则请避免在视图中使用服务器块.

Don’t : @{if(check){body}}
Recommended : @if(check){body}
Run Code Online (Sandbox Code Playgroud)

- >当您已经在服务器范围内时,避免使用@.

Don’t : @if(@variable)
Recommended : @if(variable)

Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }
Run Code Online (Sandbox Code Playgroud)


Vic*_*Vic 6

我有完全相同的问题.

在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;
   }                 
}
Run Code Online (Sandbox Code Playgroud)

在MVC4中,Razor没有从switch语句中捕获第一个花括号.所以我从@vSuggestion中删除了@并且razor正确地解析了代码.

希望能帮助到你.