I am creating a sample ASP.NET MVC 3 site using Razor as view engine. The razor syntax starts with @
character e.g. @RenderBody()
. If I write @test on my cshtml page it gives me parse error
CS0103: The name 'test' does not exist in the current context
How do I escape '@' character?
@
in braces. I managed to get this working by writing it this way: @(@new)
@@
should do it.
Razor @ escape char to symbols...
<img src="..." alt="Find me on twitter as @("@username")" />
or
<img src="..." alt="Find me on twitter as @("@")username" />
@Html.Raw("@")
seems to me to be even more reliable than @@
, since not in all cases @@
will escape.
Therefore:
<meta name="twitter:site" content="@twitterSite">
would be:
<meta name="twitter:site" content="@Html.Raw("@")twitterSite">
use <text></text>
or the easier way @:
Instead of HTML entity I prefer the use of @Html.Raw("@")
.
@@ is the escape character for @ in Razor views as stated above.
Razor does however try to work out when an '@' is just an '@' and where it marks C# (or VB.Net) code. One of the main uses for this is to identify email addresses within a Razor view - it should not be necessary to escape the @ character in an email address.
For the question about @RazorCodePart1 @@ @RazorCodePart2
, you need to the sequence:
@RazorCodePart1 @:@@ @RazorCodePart2
I know, it looks a bit odd, but it works and will get you the literal character '@' between the code blocks.
I just had the same problem. I declared a variable putting my text with the @.
@{
var twitterSite = "@MyTwitterSite";
}
...
<meta name="twitter:site" content="@twitterSite">
this work for me
<meta name="author" content="Alan van Buuren @("@Alan_van_Buuren")">
Or yoy can use: @@Alan_van_Buuren
:D
I know this question is old, but I tried all of the above and it didn't help me escape the character "@" in ASP.NET framework (MVC 5) inside a URL. Based on Terje Solem's answer though, the UTF-8 code %40
worked for me. this is the original URL I was trying to reach:
https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
this is what worked for me in my code:
https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
I tried all the options above and none worked. This is what I did that worked :
@{
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>
I created a string varible and passed all the RegEx pattern code into it, then used the variable in the html, and Razor was cool with it.
You can use @@ for this purpose. Like var email = firstName + '\@@' + domain;
just add a variable in CSHTML file
var myVariable = @"@";
and add it to your layout
<span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>
I couldn't get any of these to work inside my placeholder attribute, so I used xml special character.
<input type="text" placeholder="fex: firstname@lastname.com"/>
See more examples here. https://www.dvteclipse.com/documentation/svlinter/How_to_use_special_characters_in_XML.3F.html
Actually @ should be used with the Razor syntax Keywords or to the variable/model to bind a Value.
For Eg: if test is assigned with value i.e @ { var test = "ABC" } then you can get the value by settings as @test anywhere is cshtml page in html part. otherwise, simple use as @Html.DisplayName("test")
Success story sharing
@RazorCodePart1 @@ @RazorCodePart2
e.g. a literal @ between two Razor code snippets.<style>
tag in my razor page, which has to embed an '@media {}' directive, so html encoding is not an option; only @@ works.