我正在将旧应用程序从 ASP.NET MVC 5 (
System.Web.Mvc
v5.2.7.0) 迁移到 ASP.NET Core 5。
在 ASP.NET MVC 5.* 中,此代码有效:
@{ var htmlAttributes = new {@class="x"}; }
我使用这种方法动态设置 html 属性,但现在我收到此错误:
RZ1007“class”是保留字,不能在隐式表达式中使用
看起来
@{}
语法对于在 Razor 页面中插入脚本块不再有效。
如果我这样做
@Html.TextBoxFor(model => model.Name, new { @class = "bold" } )
它有效。
知道如何克服这个限制吗?
注意:这个问题是关于.Net5 razor,而不是Asp.Net MVC 5。该场景与如何在 Razor 中的 ActionLinks 上指定 css 类名?
中描述的场景不同正如 Franz Gleichmann 在上面的评论中指出的那样,你必须使用 double
@@
:
@Html.TextBoxFor(model => model.Name, new { @@class = "bold" } )
刚刚在 ASP.NET 8 MVC 中遇到了同样的问题。建议的将
@
前缀加倍的解决方案对于匿名对象不起作用 - 它会生成两个错误:
错误 CS1525:无效的表达式术语 '='
错误 CS0746:无效的匿名类型成员声明符。匿名类型成员必须使用成员赋值、简单名称或成员访问权限来声明。
我能找到的唯一解决方案是将匿名对象声明括在括号中:
@{
var htmlAttributes = (new { @class = "x" });
}
这似乎是 Razor 编译器的倒退。我在 GitHub 存储库上创建了一个新问题,因为上一个问题已关闭并锁定。但我不会屏住呼吸来解决问题!