在剃刀视图引擎中转义@字符

Posted

技术标签:

【中文标题】在剃刀视图引擎中转义@字符【英文标题】:Escape @ character in razor view engine 【发布时间】:2011-04-07 06:38:03 【问题描述】:

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

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

如何转义“@”字符?

【问题讨论】:

在 C# 中,您可以使用 @ 标记关键字,以将它们视为变量名而不是关键字。据我所知,以这种方式在 Razor 中使用保留关键字似乎是不可能的。 @GrimaceofDespair 仍然将关键字标记为变量的方法是将第二个 @ 括在大括号中。我设法通过这种方式编写它:@(@new) 【参考方案1】:

@@ 应该这样做。

【讨论】:

这在这种情况下似乎不起作用:@RazorCodePart1 @@ @RazorCodePart2 例如两个 Razor 代码 sn-ps 之间的文字 @。 最好的解决方案是为@字符使用 HTML 编码的字符串:@ 我的剃须刀页面中有一个<style> 标签,它必须嵌入一个'@media ' 指令,因此不能选择html 编码;只有@@ 有效。 @WoIIe 不在 URL 中。 在href中使用@("@")【参考方案2】:

Razor @escape char to symbols...

<img src="..." @username")" />

<img src="..." @")username" />

【讨论】:

这种方法似乎是最好的,因为它也适用于@media css 东西,而 HTML 实体方式可能不会。 不错!非常感谢:) 你成功了,谢谢 :) 运行良好。谢谢。 太好了,我发现这段代码更容易让大家理解【参考方案3】:

在我看来@Html.Raw("@") 似乎比@@ 更可靠,因为并非在所有情况下@@ 都会逃脱。

因此:

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

应该是:

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

【讨论】:

我如何在包含多个段落的大文本上使用它?我试过用 ` 而不是 " 但结果有问题。空白行没有错误,但 ` 字符有错误。【参考方案4】:

使用&lt;text&gt;&lt;/text&gt;或更简单的方法@:

【讨论】:

奇怪的是(at 符号冒号)@: 字符序列语法对我不起作用,因为我尝试将我的 ASP.NET MVC 3 项目升级到 MVC4。我得到的例外是:“”:“在代码块的开头无效。只有标识符、关键字、cmets、“(”和“”是有效的。” @Michael 这很奇怪。他们一定是在版本 4 中删除了它。 嗨 Kasper Skov,我发现 @: 问题实际上与 @: 无关。它与在 @if() 块中不必要地使用 @Model 有关。解决方法是删除模型上的 at 符号。我需要避免在服务器范围内使用 @ 。 ***.com/questions/12809855/…【参考方案5】:

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

【讨论】:

【参考方案6】:

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

但是,当“@”只是一个“@”以及它标记 C#(或 VB.Net)代码的位置时,Razor 确实会尝试解决。这样做的主要用途之一是在 Razor 视图中识别电子邮件地址 - 不必对电子邮件地址中的 @ 字符进行转义。

【讨论】:

我还没有找到 Razor/VB.net 和使用 Prismjs 的方法。我为 Edit一个>【参考方案7】:

关于@RazorCodePart1 @@ @RazorCodePart2的问题,需要顺序:

@RazorCodePart1 @:@@ @RazorCodePart2

我知道,它看起来有点奇怪,但它确实有效,并且会在代码块之间为您提供文字字符“@”。

【讨论】:

【参考方案8】:

我也遇到了同样的问题。我声明了一个变量,将我的文本与 @.

@
   var twitterSite = "@MyTwitterSite";


...

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

【讨论】:

这是唯一一个对我有用并且对 Open Graph 调试器有效的。【参考方案9】:

这对我有用

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

或者你可以使用: @@Alan_van_Buuren

:D

【讨论】:

【参考方案10】:

我知道这个问题很老,但我尝试了以上所有方法,但它并没有帮助我在 URL 中转义 ASP.NET 框架(MVC 5)中的字符“@”。不过,根据 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

【讨论】:

【参考方案11】:

我尝试了上述所有选项,但没有一个有效。这就是我所做的工作:

@
    string str = @"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]2,3$";


<td>Email</td>
<td>
   <input type="text" id="txtEmail" required name="email" pattern=@str /> 
</td>

我创建了一个字符串变量并将所有 RegEx 模式代码传递给它,然后在 html 中使用该变量,Razor 用它很酷。

【讨论】:

【参考方案12】:

您可以为此使用@@。 赞var email = firstName + '\@@' + domain;

【讨论】:

【参考方案13】:

只需在 CSHTML 文件中添加一个变量 var myVariable = @"@";

并将其添加到您的布局中 &lt;span class="my-class"&gt;&lt;a href="@myVariale" target="_blank" &gt;link text&lt;/a&gt;&lt;/span&gt;

【讨论】:

【参考方案14】:

我无法让这些在占位符属性中起作用,所以我使用了 xml 特殊字符。

<input type="text" placeholder="fex: firstname&#64;lastname.com"/>

在此处查看更多示例。 https://www.dvteclipse.com/documentation/svlinter/How_to_use_special_characters_in_XML.3F.html

【讨论】:

我需要在元标记中添加@。这很好用。 @@ 在那里不起作用。【参考方案15】:

实际上@应该与 Razor 语法关键字或变量/模型一起使用以绑定值。

例如: 如果 test 被赋值 即@ var test = "ABC" 然后您可以通过设置获取值,因为 @test 任何地方都是 html 部分中的 cshtml 页面。 否则,简单地用作@Html.DisplayName("test")

【讨论】:

以上是关于在剃刀视图引擎中转义@字符的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 字符串中转义 & 字符

从php中的字符串中转义特殊字符

在 C# 中转义无效的 XML 字符

需要在 .htaccess 重写规则中转义 # (hash/pound) 字符

需要在正则表达式中转义的所有特殊字符的列表

我必须在 Perl 预编译的正则表达式中转义哪些字符?