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 })" />
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 })" />