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


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.


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" />

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


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

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("@").


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.


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.


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

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.


1

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


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>


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.



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.


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/markerclustererplus@4.0.1/dist/markerclustererplus.min.js

und mit dem Code darin:

https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.