在剃刀视图引擎中转义@字符
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】:使用<text></text>
或更简单的方法@:
【讨论】:
奇怪的是(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 = @"@";
并将其添加到您的布局中
<span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>
【讨论】:
【参考方案14】:我无法让这些在占位符属性中起作用,所以我使用了 xml 特殊字符。
<input type="text" placeholder="fex: firstname@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")
【讨论】:
以上是关于在剃刀视图引擎中转义@字符的主要内容,如果未能解决你的问题,请参考以下文章