c# - ASP.NET 迁移到 Core (.NET 6.0)

标签 c# asp.net-mvc .net-core

迁移 View (.cshtml) 时:

code

@{
  var attributesDanger = (object)new { @class = "text-danger" };
  var attributesLabel = (object)new { @class = "control-label" };
}

我遇到了所有这些错误:

errors

Invalid expression Term '='
"class" is a reserved word an cannot be used in implicit expressions. An explicit expression("@()") must be used
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

.Net Framework 和 .Net Core 之间是否存在会导致这些错误的语法差异?

最佳答案

  • 您可能知道,C#(在.cs文件中)允许您使用@作为标识符前缀,以便您使用 C# 的保留关键字作为标识符,例如public class @float {}

    • 在 ASP.NET Core(即ASP.NET MVC 1.x through 4.x)之前,HTML-Helpers 支持使用 C# 匿名类型 对象来指定 HTML 属性名称,包括@class ” 对于 HTML 的class=""属性:,例如new { hidden = true, title = "tooltip text", @class = "foobar" }
    • 但是,ASP.NET Core 的 Razor 不允许在此处的@中使用@class,即使它仍在 C# 代码块内。我不知道为什么在 ASP.NET Core 中进行此更改,但 Razor 对 HTML 属性和 TagHelpers 的内置支持使得使用匿名类型(例如new { attribName = "value" })有些过时。
  • 在 Razor 中,@字符被保留来表示 Razor 代码块或渲染表达式的开始;例如:

    • <p>@paragraphText</p>
    • @{ await DoSomethingAsync(); }
    • @if( expr ) { <text>raw HTML here</text> }
  • 因为 Razor 的解析器是greedyw.r.t。 @字符,这意味着在文字输出中使用@时需要转义@,例如在内联@media元素中的CSS<style>查询中,或者在放置电子邮件时Razor HTML 中的地址:例如<a href="mailto:billg@@example.com">e-mail me</a>

    • 据我所知,由于 ASP.NET Core 自己的 Razor 风格启动了,如果在 Razor 代码块或渲染表达式的 C# 代码中使用@,您需要转义它即使它不是字面意思。

...所以将@class更改为@@class,如下所示:

(此外,您不需要/不应该需要(object) -cast)

@{
  var attributesDanger = new { @@class = "text-danger" };
  var attributesLabel  = new { @@class = "control-label" };
}

但是,由于您现在使用的是 ASP.NET Core,因此应该避免使用旧的 HTML-Helpers,而应使用 Razor 对 HTML 属性的内置支持(顺便说一句,这与 Tag-Helpers 无关):

<div class="@( someBool ? "text-danger" : "control-label" )"></div>

或者:

@{
    const String CLASS_DANGER = "text-danger";
    const String CLASS_LABEL  = "control-label";
    String cssClass = someBool ? CLASS_DANGER  : CLASS_LABEL;
}

<div class="@cssClass"></div>

关于c# - ASP.NET 迁移到 Core (.NET 6.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76664026/

相关文章:

c# - 返回 IActionResult 的单元测试 Controller 方法

asp.net-core - .NET Core RuntimeIdentifier 与 TargetFramework

asp.net-core - ASP.NET Core Web 应用程序控制台立即关闭

asp.net-mvc - ASP.NET MVC 应用程序中条件编辑操作的基于声明的授权设计

c# - 使用 Mono.Cecil 的 .NET 程序集的目标架构

c# - 在转发器控件中获取选定的下拉列表值

c# - ASP.NET Core 子文件夹上的 MapFallbackToPage

asp.net-mvc - 为什么Hangfire需要验证才能查看仪表板

javascript - 通过 POST ajax 调用下载文件

c# - 是否可以从另一个表单触发点击事件?