Escape @ character w silniku widoku maszynek do golenia

561

Tworzę przykładową witrynę ASP.NET MVC 3, używając Razor jako silnika przeglądania. Składnia maszynki do golenia zaczyna się od @znaku, np @RenderBody(). Jeśli piszę @test na mojej stronie cshtml, pojawia się błąd analizy

CS0103: Nazwa „test” nie istnieje w bieżącym kontekście

Jak mogę uciec od znaku „@”?

ajay_whiz
źródło
1
W języku C # możesz oznaczyć słowa kluczowe znakiem @, aby traktować je jako nazwy zmiennych, a nie słowa kluczowe. Z tego, co wiem, wydaje się niemożliwe używanie w ten sposób zastrzeżonych słów kluczowych w Razor.
Grimace of Despair
1
@GrimaceofDespair sposobem wciąż oznaczania słów kluczowych jako zmiennych jest umieszczenie drugiego @w nawiasach klamrowych. Udało mi się to uruchomić, pisząc w ten sposób:@(@new)
strizzwald

Odpowiedzi:

902

@@ powinien to zrobić.

Tobiasopdenbrouw
źródło
9
Wydaje się, że to nie działa w tym przypadku: @RazorCodePart1 @@ @RazorCodePart2np. Literał @ między dwoma fragmentami kodu Razor.
Josh M.
27
spróbuj <text> </text> lub @:
Kasper Skov
89
Najlepszym rozwiązaniem byłoby użycie łańcucha znaków zakodowanego w HTML dla znaku @: & # 64;
WoIIe
9
Mam <style>tag na mojej stronie maszynki do golenia, który musi zawierać dyrektywę „@media {}”, więc kodowanie HTML nie wchodzi w grę; działa tylko @@.
Triynko
12
W href użyj @ („@”)
Asiri Dissanayaka
145

Razor @ escape char to symbols ...

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

lub

<img src="..." alt="Find me on twitter as @("@")username" />
Emre Karahan
źródło
3
Ta metoda wydaje się najlepsza, ponieważ zadziała również na rzeczy @media css, podczas gdy sposób encji HTML prawdopodobnie nie będzie.
ChrisF
1
Miły! Wielkie dzięki :)
Ashkan Sirous,
1
Przybiłeś
1
Działało dobrze. Dzięki.
Orion
1
Świetnie, dla mnie ten kod jest łatwiejszy do zrozumienia
achecopar
39

użyć <text></text>lub w łatwiejszy sposób@:

Kasper Skov
źródło
To dziwne, że składnia sekwencji znaków (przy dwukropku) @: nie działa dla mnie, gdy próbuję zaktualizować swój projekt ASP.NET MVC 3 do MVC4. Otrzymuję wyjątek: „”: „jest niepoprawny na początku bloku kodu. Poprawne są tylko identyfikatory, słowa kluczowe, komentarze,„ (”i„ {”.”
Michael R
@Michael To dziwne. Musieli go usunąć w wersji 4.
Kasper Skov,
Cześć Kasper Skov, zauważyłem, że problem @: w ogóle nie był związany z @: Było to związane z niepotrzebnym używaniem @Model w bloku @if () {}. Rozwiązaniem było upuszczenie znaku at na modelu. Muszę unikać używania @, gdy już jestem w zasięgu serwera. stackoverflow.com/questions/12809855/…
Michael R
38

@Html.Raw("@")wydaje mi się jeszcze bardziej niezawodny niż @@, ponieważ nie we wszystkich przypadkach @@ucieknie.

W związku z tym:

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

byłoby:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">
Rosue Don-Chip Walford
źródło
Jak mam to wykorzystać w przypadku dużego tekstu zawierającego kilka akapitów? Próbowałem z „zamiast”, ale wynik jest wątpliwy. Brak błędów w pustych wierszach, ale błąd w znaku „
EPurpl3
24

Zamiast encji HTML wolę używać @Html.Raw("@").

CLRBTH
źródło
12

@@ jest znakiem ucieczki @ w widokach Razor, jak wspomniano powyżej.

Razor jednak próbuje się dowiedzieć, kiedy „@” jest po prostu „@” i gdzie oznacza kod C # (lub VB.Net). Jednym z głównych zastosowań tego jest identyfikacja adresów e-mail w widoku Razor - nie powinno być konieczności zmiany znaku @ w adresie e-mail.

Alfamale
źródło
Nie znalazłem sposobu na Razor / VB.net i używanie Prismjs. Próbowałem wszystkiego powyżej dla <a href="@Url.Action("Edit", "Antigen", New With {Key .id = item.AntigenId})" class="btn-xs btn-primary"> Edytuj </ a>
JoshYates1980
8

W przypadku pytania @RazorCodePart1 @@ @RazorCodePart2musisz wykonać sekwencję:

@RazorCodePart1 @:@@ @RazorCodePart2

Wiem, wygląda to trochę dziwnie, ale działa i da ci dosłowny znak „@” między blokami kodu.

DragonDTG
źródło
7

Właśnie miałem ten sam problem. Zadeklarowałem zmienną umieszczającą mój tekst za pomocą @.

@{
   var twitterSite = "@MyTwitterSite";
}

...

<meta name="twitter:site" content="@twitterSite">
watfy
źródło
To był jedyny działający dla mnie i działający w debuggerach Open Graph.
Ciprian
4

ta praca dla mnie

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

Lub możesz użyć: @@ Alan_van_Buuren

:RE

Alan
źródło
1

Możesz użyć @@ w tym celu. Lubićvar email = firstName + '\@@' + domain;

Abdus Salam Azad
źródło
1

wystarczy dodać zmienną w pliku CSHTML var myVariable = @"@";

i dodaj go do swojego układu <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>

Speedyjet
źródło
0

Wypróbowałem wszystkie powyższe opcje i żadna nie działała. To, co zrobiłem, działało:

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

Utworzyłem ciąg znaków zmienny i przekazałem do niego cały kod wzoru RegEx, a następnie użyłem zmiennej w html, a Razor był z tym spoko.

folorunso joseph
źródło
0

Właściwie @ powinno być używane ze słowami kluczowymi składni Razor lub do zmiennej / modelu w celu powiązania wartości.

Na przykład: jeśli testowi przypisano wartość tj. @ {Var test = "ABC"}, wówczas można uzyskać wartość przez ustawienia, ponieważ @test w dowolnym miejscu jest stroną cshtml w części HTML. w przeciwnym razie proste użycie jako @ Html.DisplayName („test”)

Pavithra
źródło
0

Wiem, że to pytanie jest stare, ale wypróbowałem wszystkie powyższe i nie pomogło mi to uniknąć znaku „@” w pełnym środowisku ASP.NET (MVC 5) w adresie URL. Jednak w oparciu o odpowiedź Terje Solema, kod UTF-8 %40działał dla mnie. to jest oryginalny adres URL, który próbowałem uzyskać:

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

i z kodem w nim:

https://unpkg.com/%40google/[email protected]/dist/markerclustererplus.min.js
Hector Soto
źródło