Escape @ -Zeichen in der Razor View Engine

561

Ich erstelle eine Beispiel-ASP.NET MVC 3-Site mit Razor als Ansichtsmodul. Die Rasierersyntax beginnt mit einem @Zeichen, z @RenderBody(). Wenn ich @test auf meine cshtml-Seite schreibe, erhalte ich einen Analysefehler

CS0103: Der Name 'test' existiert im aktuellen Kontext nicht

Wie entkomme ich dem Zeichen '@'?

ajay_whiz
quelle
1
In C # können Sie Schlüsselwörter mit einem @ markieren, um sie als Variablennamen und nicht als Schlüsselwörter zu behandeln. Nach allem, was ich weiß, scheint es unmöglich, reservierte Schlüsselwörter in Razor auf diese Weise zu verwenden.
Grimasse der Verzweiflung
1
@GrimaceofDespair Die Möglichkeit, Schlüsselwörter weiterhin als Variablen zu markieren, besteht darin, das zweite @in Klammern zu setzen. Ich habe es geschafft, dies zum @(@new)
Laufen

Antworten:

903

@@ Sollte es tun.

Tobiasopdenbrouw
quelle
9
Dies scheint in diesem Fall nicht zu funktionieren: @RazorCodePart1 @@ @RazorCodePart2zB ein Literal @ zwischen zwei Razor-Codefragmenten.
Josh M.
27
versuchen Sie <text> </ text> oder @:
Kasper Skov
89
Die beste Lösung wäre die Verwendung der HTML-codierten Zeichenfolge für das @ -Zeichen: & # 64;
WoIIe
9
Ich habe ein <style>Tag auf meiner Rasierseite, das eine '@media {}' - Direktive einbetten muss, daher ist eine HTML-Codierung keine Option. nur @@ funktioniert.
Triynko
12
In href benutze @ ("@")
Asiri Dissanayaka
145

Razor @ Escape Char zu Symbolen ...

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

oder

<img src="..." alt="Find me on twitter as @("@")username" />
Emre Karahan
quelle
3
Diese Methode scheint die beste zu sein, da sie auch für @ media css-Inhalte funktioniert, während dies bei der HTML-Entität wahrscheinlich nicht der Fall ist.
ChrisF
1
Nett! Vielen Dank :)
Ashkan Sirous
1
Du hast es geschafft, Danke :)
Pankaj Parkar
1
Gut gearbeitet. Vielen Dank.
Orion
1
Großartig, ich finde diesen Code für alle leichter zu verstehen
Achecopar
39

verwenden <text></text>oder den einfacheren Weg@:

Kasper Skov
quelle
Es ist seltsam, dass die (am Doppelpunkt) @: Zeichenfolgensyntax bei mir nicht funktioniert, da ich versuche, mein ASP.NET MVC 3-Projekt auf MVC4 zu aktualisieren. Die Ausnahme, die ich bekomme, ist: "": "ist zu Beginn eines Codeblocks nicht gültig. Nur Bezeichner, Schlüsselwörter, Kommentare," ("und" {"sind gültig."
Michael R
@ Michael Das ist komisch. Sie müssen es in Version 4 entfernt haben.
Kasper Skov
Hallo Kasper Skov, ich habe festgestellt, dass das @: -Problem überhaupt nicht mit @: zusammenhängt. Es bezog sich auf die unnötige Verwendung von @Model in einem @ if () {} -Block. Die Lösung bestand darin, das at-Zeichen auf dem Modell abzulegen. Ich muss die Verwendung von @ vermeiden, wenn ich mich bereits im Serverbereich befinde. stackoverflow.com/questions/12809855/…
Michael R
38

@Html.Raw("@")scheint mir noch zuverlässiger zu sein als @@, da nicht in allen fällen @@entkommen wird.

Deshalb:

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

wäre:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">
Rosue Don-Chip Walford
quelle
Und wie verwende ich das für einen großen Text mit mehreren Absätzen? Ich habe es mit "statt" versucht, aber das Ergebnis ist fraglich. Keine Fehler in leeren Zeilen, aber Fehler in "Zeichen".
EPurpl3
24

Anstelle einer HTML-Entität bevorzuge ich die Verwendung von @Html.Raw("@").

CLRBTH
quelle
12

@@ ist das Escape-Zeichen für @ in Razor-Ansichten, wie oben angegeben.

Razor versucht jedoch herauszufinden, wann ein '@' nur ein '@' ist und wo es C # (oder VB.Net) -Code markiert. Eine der Hauptanwendungen hierfür ist die Identifizierung von E-Mail-Adressen in einer Razor-Ansicht. Es sollte nicht erforderlich sein, das @ -Zeichen in einer E-Mail-Adresse zu maskieren.

Alfamale
quelle
Ich habe keinen Weg für Razor / VB.net und die Verwendung von Prismjs gefunden. Ich habe alles oben für <a href="@Url.Action("Edit", "Antigen", Neu mit {Key .id = item.AntigenId})" class="btn-xs btn-primary"> Bearbeiten </ versucht a>
JoshYates1980
8

Für die Frage zu @RazorCodePart1 @@ @RazorCodePart2benötigen Sie die Reihenfolge:

@RazorCodePart1 @:@@ @RazorCodePart2

Ich weiß, es sieht ein bisschen seltsam aus, aber es funktioniert und bringt Ihnen das Literalzeichen '@' zwischen den Codeblöcken.

DragonDTG
quelle
7

Ich hatte gerade das gleiche Problem. Ich habe eine Variable deklariert, die meinen Text mit dem @ verbindet.

@{
   var twitterSite = "@MyTwitterSite";
}

...

<meta name="twitter:site" content="@twitterSite">
watfy
quelle
Dies war die einzige, die für mich arbeitete und für Open Graph-Debugger gültig war.
Ciprian
4

diese Arbeit für mich

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

Oder Sie können verwenden: @@ Alan_van_Buuren

: D.

Alan
quelle
1

Sie können @@ für diesen Zweck verwenden. Mögenvar email = firstName + '\@@' + domain;

Abdus Salam Azad
quelle
1

Fügen Sie einfach eine Variable in die CSHTML-Datei ein var myVariable = @"@";

und fügen Sie es Ihrem Layout hinzu <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>

Speedyjet
quelle
0

Ich habe alle oben genannten Optionen ausprobiert und keine hat funktioniert. Das habe ich getan, was funktioniert hat:

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

Ich habe eine String-Variable erstellt und den gesamten RegEx-Mustercode übergeben, dann die Variable im HTML-Code verwendet, und Razor war cool damit.

folorunso joseph
quelle
0

Eigentlich sollte @ mit den Razor-Syntax-Schlüsselwörtern oder mit der Variablen / dem Modell verwendet werden, um einen Wert zu binden.

Zum Beispiel: Wenn dem Test der Wert ie @ {var test = "ABC"} zugewiesen ist, können Sie den Wert durch Einstellungen abrufen, da @test überall eine cshtml-Seite im HTML-Teil ist. Andernfalls einfach als @ Html.DisplayName ("test") verwenden.

Pavithra
quelle
0

Ich weiß, dass diese Frage alt ist, aber ich habe alle oben genannten Fragen ausprobiert und es hat mir nicht geholfen, dem Zeichen "@" in ASP.NET Full Framework (MVC 5) innerhalb einer URL zu entkommen. Basierend auf der Antwort von Terje Solem %40funktionierte der UTF-8-Code für mich. Dies ist die ursprüngliche URL, die ich erreichen wollte:

https://unpkg.com/@google/[email protected]/dist/markerclustererplus.min.js

und mit dem Code darin:

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