Caractère d'échappement @ dans le moteur de vue de rasoir


561

Je crée un exemple de site ASP.NET MVC 3 en utilisant Razor comme moteur de vue. La syntaxe du rasoir commence par un @caractère, par exemple @RenderBody(). Si j'écris @test sur ma page cshtml, cela me donne une erreur d'analyse

CS0103: Le nom «test» n'existe pas dans le contexte actuel

Comment échapper au caractère '@'?


1
En C #, vous pouvez marquer les mots clés avec un @ pour les traiter comme des noms de variables plutôt que des mots clés. Avec tout ce que je sais, il semble impossible d'utiliser des mots-clés réservés dans Razor de cette façon.
Grimace of Despair

1
@GrimaceofDespair la manière de toujours marquer des mots-clés comme variables est de placer le second @entre accolades. J'ai réussi à faire fonctionner cela en l'écrivant de cette façon:@(@new)
strizzwald

Réponses:


904

@@ devrait le faire.


9
Cela ne semble pas fonctionner dans ce cas: @RazorCodePart1 @@ @RazorCodePart2par exemple un @ littéral entre deux extraits de code Razor.
Josh M.

27
essayez <text> </text> ou @:
Kasper Skov

89
La meilleure solution serait d'utiliser la chaîne de caractères encodée en HTML pour le @ -character: & # 64;
WoIIe

9
J'ai une <style>balise dans ma page de rasoir, qui doit intégrer une directive '@media {}', donc l'encodage html n'est pas une option; uniquement @@ fonctionne.
Triynko

12
Dans href, utilisez @ ("@")
Asiri Dissanayaka

145

Razor @ escape char aux symboles ...

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

ou

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

3
Cette méthode semble la meilleure car elle fonctionnera également pour les trucs @media css, contrairement à la méthode d'entité HTML.
ChrisF

1
Agréable! Merci beaucoup :)
Ashkan Sirous

1
Vous l'avez cloué, merci :)
Pankaj Parkar

1
A bien fonctionné. Merci.
Orion du

1
Génial, je trouve ce code plus facile à comprendre pour tout le monde
achecopar

39

utiliser <text></text>ou la manière la plus simple@:


Il est étrange que la syntaxe de séquence de caractères @ (au signe deux-points) @: ne fonctionne pas pour moi, car j'essaie de mettre à niveau mon projet ASP.NET MVC 3 vers MVC4. L'exception que j'obtiens est: "": "n'est pas valide au début d'un bloc de code. Seuls les identifiants, mots-clés, commentaires," ("et" {"sont valides."
Michael R

@Michael C'est bizarre. Ils doivent l'avoir supprimé dans la version 4.
Kasper Skov

Bonjour Kasper Skov, j'ai trouvé que le problème @: n'était pas du tout lié à @: Elle était liée à l'utilisation inutile de @Model, dans un bloc @if () {}. Le correctif consistait à supprimer le signe at sur le modèle. Je dois éviter d'utiliser @ lorsqu'il est déjà dans la portée du serveur. stackoverflow.com/questions/12809855/…
Michael R

38

@Html.Raw("@")me semble être encore plus fiable que @@, puisque dans tous les cas @@ne s'échappera pas.

Donc:

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

serait:

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

Et comment puis-je utiliser cela sur un texte énorme avec plusieurs paragraphes? J'ai essayé avec `au lieu de" mais le résultat est discutable. Aucune erreur sur les lignes vides mais erreur sur `caractère.
EPurpl3

24

Au lieu d'entité HTML, je préfère l'utilisation de @Html.Raw("@").


12

@@ est le caractère d'échappement pour @ dans les vues Razor comme indiqué ci-dessus.

Razor essaie cependant de déterminer quand un '@' est juste un '@' et où il marque le code C # (ou VB.Net). L'une des principales utilisations de ceci est d'identifier les adresses e-mail dans une vue Razor - il ne devrait pas être nécessaire d'échapper le caractère @ dans une adresse e-mail.


Je n'ai trouvé aucun moyen d'utiliser Razor / VB.net et d'utiliser Prismjs. J'ai tout essayé ci-dessus pour <a href="@Url.Action("Edit", "Antigen", Nouveau avec {Key .id = item.AntigenId})" class="btn-xs btn-primary"> Modifier </ a>
JoshYates1980

8

Pour la question sur @RazorCodePart1 @@ @RazorCodePart2, vous devez la séquence:

@RazorCodePart1 @:@@ @RazorCodePart2

Je sais, cela semble un peu étrange, mais cela fonctionne et vous obtiendrez le caractère littéral «@» entre les blocs de code.


7

J'ai juste eu le même problème. J'ai déclaré une variable mettant mon texte avec le @.

@{
   var twitterSite = "@MyTwitterSite";
}

...

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

C'était le seul qui fonctionnait pour moi et qui était valable pour les débogueurs Open Graph.
Ciprian

4

ce travail pour moi

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

Ou vous pouvez utiliser: @@ Alan_van_Buuren

:RÉ



1

il suffit d'ajouter une variable dans le fichier CSHTML var myVariable = @"@";

et ajoutez-le à votre mise en page <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>


0

J'ai essayé toutes les options ci-dessus et aucune n'a fonctionné. C'est ce que j'ai fait qui a fonctionné:

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

J'ai créé une chaîne variable et passé tout le code de modèle RegEx dedans, puis utilisé la variable dans le html, et Razor était cool avec elle.



0

En fait, @ doit être utilisé avec les mots-clés de la syntaxe Razor ou avec la variable / modèle pour lier une valeur.

Par exemple: si le test est affecté avec une valeur, c'est-à-dire @ {var test = "ABC"}, vous pouvez obtenir la valeur par les paramètres car @test n'importe où est la page cshtml dans la partie html. sinon, simple utilisation comme @ Html.DisplayName ("test")


0

Je sais que cette question est ancienne, mais j'ai essayé tout ce qui précède et cela ne m'a pas aidé à échapper au caractère "@" dans le framework complet ASP.NET (MVC 5) à l'intérieur d'une URL. Sur la base de la réponse de Terje Solem, le code UTF-8 a %40fonctionné pour moi. il s'agit de l'URL d'origine que j'essayais d'atteindre:

https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js

et avec le code dedans:

https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.