【问题标题】:MVC3 to MVC4 RTM Manual Upgrade issue: @ in front of this keyword throwing errorMVC3 到 MVC4 RTM 手动升级问题:@ 在这个关键字前面抛出错误
【发布时间】:2012-09-14 13:29:53
【问题描述】:

我有一个 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")

【问题讨论】:

  • 您是否尝试过仅删除 this 前面的 @?
  • 那行不通。如果你这样做,代码会被执行,但不会渲染任何内容。 @ 告诉将调用结果呈现给响应。
  • 我刚刚将我的项目从 mvc3 升级到 mvc4,我也遇到了同样的问题。我使用 resharper 7 来清理我的视图文件,并在清理配置中,在每个“Html”之前添加一个“this”。我在整个项目中查找并将“this.Html”替换为“Html”,它解决了问题。这是一个问题,但我更改了我的 resharper 配置以防止添加“this”添加它并不完美。我很惊讶这个问题被否决了。有人有同样的问题吗??谢谢克里斯... +1

标签: razor asp.net-mvc-4


【解决方案1】:

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

两种解决方法是:

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

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

【讨论】:

  • 我正在使用:@:@(this.Html.ActionLink("Add", "Add"))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
相关资源
最近更新 更多