C#中使用Razor的字符串插值如何转义双引号?

8
我有以下使用三元运算符包含或省略data-*属性的Razor代码:
 <select class="form-control"
        @(field.DependentDropdown ? $"data-selected={Model.KeyValues.GetValue(field.Name)}" : "")>

当它在 HTML 中呈现时,它会像这样显示:
<select class="form-control" 
        data-selected="Toyota" yaris="">

正如您所看到的,数据选择属性的值未正确格式化 - 它应该是一个用双引号括起来的单词 "Toyota Yaris"

如何正确转义或添加双引号:

 $"data-selected={Model.KeyValues.GetValue(field.Name)}"

Model.KeyValues.GetValue(field.Name) 解析为什么? - maccettura
只需要在字符串中使用两次引号 "",或者甚至可以在字符串中使用单引号 ' - Sean T
建议:将三元运算符移动到 Razor C# 变量中,然后在 HTML 中使用该变量。这样应该更容易阅读和维护。(虽然不能立即解决问题) - gunr2171
@maccettura 它返回 丰田Yaris - adam78
@SeanT已经尝试过使用""',但仍然存在同样的问题。 - adam78
3个回答

9
你需要使用不常见的<text>语法。
例如:
<h1 @{if (true) { <text>data-selected="Hello world"</text> } }>Hello</h1>

尝试这个:

 <select class="form-control"
        @{ if (field.DependentDropdown) { <text>data-selected="@Model.KeyValues.GetValue(field.Name)"</text> } }>

我很难说服它在三元运算符中工作 - 如果您正确理解语法,请随意编辑答案


6

在HtmlHelper类的Raw()方法调用中包装该字符串。

<select class="form-control"
    @(field.DependentDropdown ? Html.Raw($"data-selected=\"{Model.KeyValues.GetValue(field.Name)}\"") : "")>

-2

你可以试试这个。

Fiddle 中的一个例子。

 $"data-selected=\"{Model.KeyValues.GetValue(field.Name)}\""

1
已经尝试过了,它会呈现为 data-select="&quot;Toyota" yaris&quot;="" - adam78
@adam78 这意味着你的结果包含空格,在渲染之前修剪你的结果,删除末尾的符号 = - Antoine V
1
通过使用反斜杠,根据您的解决方案,我得到了以下结果:data-select=""Toyota" yaris&quot;。我知道没有空格,因为当我尝试 data-selected="@(Model.KeyValues.GetValue(field.Name))" 时,它可以正常渲染。 - adam78

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接