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 '@'?

ajay_whiz
la source
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.

Tobiasopdenbrouw
la source
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" />
Emre Karahan
la source
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@:

Kasper Skov
la source
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">
Rosue Don-Chip Walford
la source
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("@").

CLRBTH
la source
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.

Alfamale
la source
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.

DragonDTG
la source
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">
watfy
la source
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É

Alan
la source
1

Vous pouvez utiliser @@ à cet effet. Commevar email = firstName + '\@@' + domain;

Abdus Salam Azad
la source
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>

Speedyjet
la source
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.

folorunso joseph
la source
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")

Pavithra
la source
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/[email protected]/dist/markerclustererplus.min.js

et avec le code dedans:

https://unpkg.com/%40google/[email protected]/dist/markerclustererplus.min.js
Hector Soto
la source