ASP.NET Core 5 错误:“class”是保留字,不能在隐式表达式中使用

问题描述 投票:0回答:2

我正在将旧应用程序从 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 类名?

中描述的场景不同
c# asp.net-core asp.net-core-mvc .net-5
2个回答
1
投票

正如 Franz Gleichmann 在上面的评论中指出的那样,你必须使用 double

@@
:

@Html.TextBoxFor(model => model.Name, new { @@class = "bold" } )

0
投票

刚刚在 ASP.NET 8 MVC 中遇到了同样的问题。建议的将

@
前缀加倍的解决方案对于匿名对象不起作用 - 它会生成两个错误:

错误 CS1525:无效的表达式术语 '='
错误 CS0746:无效的匿名类型成员声明符。匿名类型成员必须使用成员赋值、简单名称或成员访问权限来声明。

我能找到的唯一解决方案是将匿名对象声明括在括号中:

@{ 
    var htmlAttributes = (new { @class = "x" }); 
}

这似乎是 Razor 编译器的倒退。我在 GitHub 存储库上创建了一个新问题,因为上一个问题已关闭并锁定。但我不会屏住呼吸来解决问题!

© www.soinside.com 2019 - 2024. All rights reserved.