Escape @ character in razor view engine

2018-12-31 14:21发布

问题:

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?

回答1:

@@ should do it.



回答2:

Razor @ escape char to symbols...

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

or

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


回答3:

use <text></text> or the easier way @:



回答4:

@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\">


回答5:

Instead of HTML entity I prefer the use of @Html.Raw(\"@\")



回答6:

@@ 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.



回答7:

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.



回答8:

I just had the same problem. I declared a variable putting my text with the @.

@{
   var twitterSite = \"@MyTwitterSite\";
}

...

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


回答9:

this work for me

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

Or yoy can use: @@Alan_van_Buuren

:D



回答10:

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.



回答11:

You can use @@ for this purpose. Like var email = firstName + \'\\@@\' + domain;



回答12:

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>



回答13:

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&#64;lastname.com\"/>

See more examples here. https://www.dvteclipse.com/documentation/svlinter/How_to_use_special_characters_in_XML.3F.html



回答14:

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\")