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 „@”?


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ć.


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

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


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

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


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.


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.


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

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



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>


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.



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”)


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

i z kodem w nim:

https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.