ASP.NET Core MVC 标签助手参数中的字符串文字

String literals in ASP.NET Core MVC tag helper arguments

Razor 允许 ASP.NET 核心 MVC 标记助手的参数在相应的属性声明中编写为内联 C# 表达式。但是,由于 HTML 属性由引号分隔,如果这样的表达式本身应该包含引号,语法是什么?

这是来自 https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring 的示例:

<website-information info="new WebsiteContext {
    Version = new Version(1, 3),
    CopyrightYear = 1638,
    Approved = true,
    TagsToShow = 131 }" />

如果 WebsiteContext 属性之一采用字符串文字,这会是什么样子?

由于我原来的答案是有缺陷的,这里有一个可行的方法,我在与您的代码类似的代码上进行了测试:

如果 CopyrightYear 是一个字符串,您可以对外部引号使用单引号,对字符串使用双引号,如下所示:

 <website-information info='new WebsiteContext {
                                Version = new Version(1, 3),
                                CopyrightYear = "1638",
                                Approved = true,
                                TagsToShow = 131 }' />

作为 Ron C 的回答中描述的替代解决方法,也可以将 WebSiteContext 构造代码放入单独的 Razor 代码块中,将结果存储在变量中。

@{
var context = new WebsiteContext {
        Version = new Version(1, 3),
        CopyrightYear = "1638",
        Approved = true,
        TagsToShow = 131 };
}

<website-information info="@context" />

如果您将 new 表达式包装在 @(...) 中,它将全部被视为 C# 代码,因此您不会有问题。

像这样:

<website-information info="@(new WebsiteContext {
                            Version = new Version(1, 3),
                            CopyrightYear = "1638",
                            Approved = true,
                            TagsToShow = 131 })" />