Escape @ персонаж в движке бритвы


562

Я создаю пример сайта ASP.NET MVC 3, используя Razor в качестве движка просмотра. Синтаксис бритвы начинается с @символа, например @RenderBody(). Если я пишу @test на своей странице cshtml, это дает мне ошибку разбора

CS0103: имя «тест» не существует в текущем контексте

Как мне избежать символа "@"?


1
В C # вы можете помечать ключевые слова как @, чтобы рассматривать их как имена переменных, а не как ключевые слова. Из всего, что я знаю, кажется, невозможно использовать зарезервированные ключевые слова в Razor таким образом.
Гримаса Отчаяния

1
@GrimaceofDespair способ пометить ключевые слова как переменные - заключить второе @в фигурные скобки. Мне удалось заставить это работать, написав это так:@(@new)
strizzwald

Ответы:


904

@@ должен сделать это.


9
Похоже, что в этом случае это не работает: @RazorCodePart1 @@ @RazorCodePart2например, литерал @ между двумя фрагментами кода Razor.
Джош М.

27
попробуйте <text> </ text> или @:
Каспер Сков

89
Лучшим решением было бы использование строки символов в кодировке HTML для @ -character: & # 64;
WoIIe

9
У меня есть <style>тег на моей странице бритвы, который должен включать директиву @media {}, поэтому html-кодирование не вариант; работает только @@
Трийнко

12
В href use @ ("@")
Асири Диссанаяка

145

Razor @ экранировать символ на символы ...

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

или

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

3
Этот метод кажется лучшим, так как он также будет работать для @media css, тогда как способ HTML-сущности, вероятно, не подойдет.
ChrisF

1
Ницца! Большое спасибо :)
Ашкан Сироус

1
Вы прибили это, Спасибо :)
Pankaj Parkar

1
Сработало хорошо. Спасибо.
Орион,

1
Отлично, я нахожу этот код более понятным для всех
achecopar

39

использовать <text></text>или более простой способ@:


Это странно, синтаксис последовательности символов @: (у знака двоеточия) у меня не работает, так как я пытаюсь обновить свой проект ASP.NET MVC 3 до MVC4. Исключение, которое я получаю: "": "недопустимо в начале блока кода. Действительны только идентификаторы, ключевые слова, комментарии," ("и" {"."
Майкл Р

@ Майкл Это странно. Должно быть, они удалили его в версии 4.
Каспер Сков

Привет, Каспер Сков, я обнаружил, что проблема @: вообще не связана с @ :. Это было связано с ненужным использованием @Model в блоке @if () {}. Исправление было в том, чтобы уронить знак «Модель». Мне нужно избегать использования @, когда уже в области сервера. stackoverflow.com/questions/12809855/…
Майкл Р

38

@Html.Raw("@")Мне кажется, даже более надежным, чем @@, поскольку не во всех случаях @@вырваться.

Следовательно:

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

было бы:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">

И как я могу использовать это на огромном тексте с несколькими параграфами? Я пробовал с `вместо", но результат сомнительный. Нет ошибок в пустых строках, но ошибка в
символе

24

Вместо сущности HTML я предпочитаю использовать @Html.Raw("@").


12

@@ - это escape-символ для @ в представлениях Razor, как указано выше.

Однако Razor пытается разобраться, когда «@» - это просто «@» и где он помечает C # (или VB.Net) код. Одним из основных применений для этого является идентификация адресов электронной почты в представлении Razor - не должно быть необходимости экранировать символ @ в адресе электронной почты.


Я не нашел пути для Razor / VB.net и использования Prismjs. Я попробовал все выше для <a href="@Url.Action("Edit", "Antigen", нового с {Key .id = item.AntigenIdcasts)" class="btn-xs btn-primary"> Изменить </ a>
JoshYates1980

8

Для вопроса о @RazorCodePart1 @@ @RazorCodePart2, вам нужно последовательность:

@RazorCodePart1 @:@@ @RazorCodePart2

Я знаю, это выглядит немного странно, но это работает, и вы получите буквальный символ '@' между блоками кода.


7

У меня просто была такая же проблема. Я объявил переменную, поместив мой текст с @.

@{
   var twitterSite = "@MyTwitterSite";
}

...

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

Это был единственный, который работал для меня и действителен для отладчиков Open Graph.
Ciprian

4

эта работа для меня

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

Или вы можете использовать: @@ Alan_van_Buuren

: D



1

просто добавьте переменную в файл CSHTML var myVariable = @"@";

и добавьте его в свой макет <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>


0

Я перепробовал все варианты выше и ни один не работал. Вот что я сделал, что сработало:

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

Я создал строковую переменную и передал в нее весь код шаблона RegEx, затем использовал переменную в html, и Razor с этим справился.


0

Я не мог заставить что-либо из этого работать внутри моего атрибута-заполнителя, поэтому я использовал специальный символ xml.

<input type="text" placeholder="fex: firstname&#64;lastname.com"/>

Смотрите больше примеров здесь. https://www.dvteclipse.com/documentation/svlinter/How_to_use_special_characters_in_XML.3F.html


1
Мне нужно было добавить @ в метатеге. и это работает нормально. @@ там не работает.
Асири Диссанаяка

0

На самом деле @ следует использовать с синтаксисом Razor Keywords или с переменной / моделью для привязки значения.

Например, если тесту присвоено значение, т. Е. @ {Var test = "ABC"}, вы можете получить значение по настройкам, поскольку @test в любом месте является страницей cshtml в html-части. в противном случае просто используйте как @ Html.DisplayName ("test")


0

Я знаю, что этот вопрос старый, но я попробовал все вышеперечисленное, и он не помог мне избежать символа "@" в полной структуре ASP.NET (MVC 5) внутри URL. Однако, основываясь на ответе Терье Солема, код UTF-8 %40сработал для меня. это оригинальный URL, который я пытался найти:

https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js

и с кодом в нем:

https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.