MVC3到MVC4 RTM手动升级问题:@在此关键字前面抛出错误

时间:2012-09-14 13:29:54

标签: razor asp.net-mvc-4

我有一个MVC3项目,其中包含以下代码,它们运行得很好:

@if (this.Model.ShowAddButton)
{ 
    @this.Html.ActionLink("Add", "Add")
}

我们的团队有一个编码指南,所有本地方法调用都需要以this为前缀。到目前为止,这在MVC3中运行得很好。

我使用here的指导手动将项目升级到MVC4。现在上面的代码错误输出以下消息:

Unexpected "this" keyword after "@" character.  Once inside code, you do not need to prefix constructs like "this" with "@".

我认为错误信息具有误导性。这意味着这样做是合法的,但不是必要的。我故意这样做,即使我知道不需要遵守编码指南。解析器失败的事实,该消息应指示Once inside code, you cannot prefix....我知道您不能在嵌套代码块中使用@,问题不在于@符号,而在于使用this。在语句中添加this不会影响调用的结果,所以我不明白它为什么会抛出异常。我可以通过删除this

来解决问题
@if (this.Model.ShowAddButton)
{ 
    @Html.ActionLink("Add", "Add")
}

但这样做会与我们的编码指南相冲突。所以我的问题是,这是在MVC4中故意改变的东西(因为它在MVC3中工作得很好)。或者这是MVC4中的错误?如果我删除if块,我仍然可以使用this关键字。

@this.Html.ActionLink("Add", "Add")

1 个答案:

答案 0 :(得分:4)

这实际上是MVC4中的bug。提交了report

两种解决方法是:

@if (this.Model.ShowAddButton)
{ 
    @Html.ActionLink("Add", "Add")
}

OR

@if (this.Model.ShowAddButton)
{ 
    @(this.Html.ActionLink("Add", "Add"))
}