在 Razor 视图引擎中如何转义 @ 字符

670

我正在使用 Razor 作为视图引擎创建一个 ASP.NET MVC 3 示例网站。Razor 语法以 @ 字符开始,例如 @RenderBody()。如果我在 cshtml 页面上写 @test,它会给我解析错误:

CS0103:当前上下文中不存在名称“test”

我该如何转义 '@' 字符?


1
在C#中,您可以使用@标记关键字,将它们视为变量名而不是关键字。就我所知,似乎不可能以这种方式在Razor中使用保留关键字。 - Grimace of Despair
1
@GrimaceofDespair,仍然将关键字标记为变量的方法是将第二个@括在大括号中。我通过以下方式编写成功实现了这一点:@(@new) - strizzwald
16个回答

1093
< p >< code > @@ 就可以了。


10
在这种情况下似乎不起作用:@RazorCodePart1 @@ @RazorCodePart2,例如在两个Razor代码片段之间有一个字面上的@符号。 - Josh M.
115
最好的解决方案是使用HTML编码后的字符字符串来表示@符号:@。 - ˈvɔlə
14
我在 Razor 页面中有一个 <style> 标签,必须嵌入一个 '@media {}' 指令,因此无法使用HTML编码;只能使用@@。 - Triynko
1
@WoIIe 不是一个URL。 - Machado
38
在 href 中使用 @("@")。 - Asiri Dissanayaka
显示剩余2条评论

190

Razor @符号转义为符号...

<img src="..." alt="Find me on twitter as @("@username")" />
或者
<img src="..." alt="Find me on twitter as @("@")username" />

3
这种方法似乎最好,因为它还可以用于 @media css 样式,而 HTML 实体的方式可能无法实现。 - ChrisF
1
很好!非常感谢 :) - Ashkan S
1
你做得很好,谢谢 :) - Pankaj Parkar
1
工作得很好。谢谢。 - Orion
1
很好,我发现这段代码更容易让每个人理解。 - achecopar

49
@Html.Raw("@") 对我来说似乎比 @@ 更可靠,因为并非所有情况下 @@ 都会转义。
因此:
<meta name="twitter:site" content="@twitterSite">

将会是:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">

我该如何在包含多个段落的大文本上使用它?我尝试过使用 而不是 ",但结果令人怀疑。空行没有错误,但 字符会出错。 - EPurpl3

43

使用<text></text>或者更加简单的方式@:


很奇怪,当我尝试将ASP.NET MVC 3项目升级到MVC4时,(at sign colon) @:字符序列语法对我不起作用。我得到的异常是:"":"不是代码块的有效开头。只有标识符、关键字、注释、"("和"{"是有效的。 - Michael R
@Michael 这很奇怪。他们一定在第4版中将其删除了。 - Kasper Skov
嗨,Kasper Skov,我发现@:问题实际上与@:无关。 它与在@if() {}块中不必要地使用@Model有关。 修复方法是在Model上删除at符号。 当已经在服务器范围内时,我需要避免使用@。 https://dev59.com/W2cs5IYBdhLWcg3wfEDa - Michael R

29

我更喜欢使用@Html.Raw("@")而不是HTML实体。


13

如上所述,@@是Razor视图中@的转义字符。

然而,Razor会尝试确定“@”仅为“@”时以及其标记C#(或VB.Net)代码的位置。其中一个主要用途是在Razor视图中识别电子邮件地址 - 在电子邮件地址中不需要转义@字符。


我还没有找到在Razor/VB.net中使用Prismjs的方法。我尝试了上面所有的<a href="@Url.Action("Edit", "Antigen", New With {Key .id = item.AntigenId})" class="btn-xs btn-primary">Edit</a>。 - JoshYates1980

9

对于关于@RazorCodePart1 @@ @RazorCodePart2的问题,你需要按照以下顺序进行:

@RazorCodePart1 @:@@ @RazorCodePart2

我知道,看起来有点奇怪,但这样做是有效的,并且会在代码块之间获得字面字符“@”。

8

我刚遇到了同样的问题。我用@符号声明了一个变量,其中包含我的文本。

@{
   var twitterSite = "@MyTwitterSite";
}

...

<meta name="twitter:site" content="@twitterSite">

这是唯一一个对我有效并且适用于Open Graph调试器的工具。 - Ciprian

8
我知道这个问题很老了,但我尝试了上面的所有方法都不能帮助我在ASP.NET框架(MVC 5)中逃脱URL中的“@”字符。但根据Terje Solem的答案,UTF-8代码 %40 对我有用。这是我原来想访问的URL:

https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js

这是我在我的代码中实现的方法:

https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js

5

这对我很有用。

<meta name="author" content="Alan van Buuren @("@Alan_van_Buuren")">

你可以使用以下方式: @@Alan_van_Buuren :D

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