在razor视图引擎中转义@字符


561

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

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

如何转义“ @”字符?


1
在C#中,您可以使用@标记关键字,以将其视为变量名而不是关键字。据我所知,用这种方式在Razor中使用保留关键字似乎是不可能的。
绝望的鬼脸

1
@GrimaceofDespair仍将关键字标记为变量的方法是@用大括号括起来。我设法通过以下方式使其正常工作:@(@new)
strizzwald

Answers:


902

@@ 应该这样做。


9
在这种情况下,这似乎不起作用:@RazorCodePart1 @@ @RazorCodePart2例如,两个Razor代码段之间的文字@。
乔什M.

27
尝试<text> </ text>或@:
Kasper Skov

89
最好的解决方案是将HTML编码的字符串用于@字符:&#64;。
2013年

9
我的<style>剃须刀页面上有一个标签,该标签必须嵌入'@media {}'指令,因此html编码不是一种选择;只有@@有效。
Triynko

12
在href中使用@(“ @”)
Asiri Dissanayaka,

145

剃刀@将符号转义为char ...

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

要么

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

3
该方法似乎是最好的,因为它也适用于@media css东西,而HTML实体方法可能不会。
克里斯(ChrisF)2014年

1
真好!非常感谢:)
阿什坎Sirous,2013年

1
您钉上了它,谢谢:)
Pankaj Parkar's

1
运作良好。谢谢。
Orion

1
太好了,我发现每个人都更容易理解该代码
achecopar

39

使用<text></text>或更简单的方法@:


奇怪的是(在冒号处)@:字符序列语法对我不起作用,因为我尝试将ASP.NET MVC 3项目升级到MVC4。我得到的例外是:““:”在代码块的开头无效。只有标识符,关键字,注释,“(”和“ {”有效。“
Michael R

@Michael太奇怪了。他们一定是在第4版删除它
卡斯帕斯科夫

嗨,Kasper Skov,我发现@:问题实际上与@:根本无关。这与在@if(){}块中不必要地使用@Model有关。解决方法是在模型上放置at符号。当服务器范围内时,我需要避免使用@。 stackoverflow.com/questions/12809855/…–
Michael R

38

@Html.Raw("@")在我看来,它甚至比更加可靠@@,因为并非在所有情况下@@都可以逃脱。

因此:

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

将会:

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

我如何在带有多个段落的大型文本上使用它?我尝试用`代替“,但结果令人怀疑。空白行没有错误,但`字符有错误
。– EPurpl3

24

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


12

如上所述,@@是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">编辑</ a>
JoshYates1980 '17

8

对于有关的问题@RazorCodePart1 @@ @RazorCodePart2,您需要执行以下操作:

@RazorCodePart1 @:@@ @RazorCodePart2

我知道,它看起来有些奇怪,但是它可以工作,并且可以在代码块之间为您提供文字字符“ @”。


7

我只是有同样的问题。我声明了一个变量,使我的文本带有@。

@{
   var twitterSite = "@MyTwitterSite";
}

...

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

这是唯一对我有用的工具,并且对Open Graph调试器有效。
西普里安

4

这项工作对我来说

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

或者可以使用:@@ Alan_van_Buuren

:D



1

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

并将其添加到您的布局 <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>


0

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

@{
    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对此很满意。



0

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

例如:如果为test分配了值,即@ {var test =“ ABC”},那么您可以通过设置获取值,因为@test在html部分的cshtml页面中的任何位置。否则,可以简单地用作@ Html.DisplayName(“ test”)


0

我知道这个问题很旧,但是我尝试了以上所有方法,但是它没有帮助我在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.