【发布时间】: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