Втеча @ символ у двигуні подання бритви


561

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

CS0103: Назва "тест" не існує в поточному контексті

Як уникнути символу "@"?


1
У C # ви можете позначати ключові слова за допомогою символу @, щоб розглядати їх як імена змінних, а не як ключові слова. З усього, що я знаю, представляється неможливим використати зарезервовані ключові слова в Razor таким чином.
Гримаса відчаю

1
@GrimaceofDespair спосіб як і раніше позначати ключові слова як змінні - це включити друге @в дужки. Мені вдалося @(@new)
налагодити

Відповіді:


903

@@ повинен це зробити.


9
Здається, в цьому випадку не працює: @RazorCodePart1 @@ @RazorCodePart2наприклад, буквальний @ між двома фрагментами коду Razor.
Джош М.

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

89
Найкращим рішенням буде використання символьної рядки, кодованої HTML, для @ -character: & # 64;
WoIIe

9
На <style>своїй сторінці бритви у мене є тег, який повинен вбудовувати директиву "@media {}", тому кодування HTML не є варіантом; працює лише @@
Трайнко

12
У href use @ ("@")
Асірі

145

Бритва @ рятувальна символіка до символів ...

<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
Добре працювали. Дякую.
Оріон


39

використання <text></text>або простіший спосіб@:


Це не дивно (у знаку двокрапка) @: синтаксис послідовностей символів для мене не працює, тому що я намагаюся оновити свій проект ASP.NET MVC 3 до MVC4. Виняток, який я отримую, є: "": "недійсний на початку блоку коду. Дійсні лише ідентифікатори, ключові слова, коментарі" ("і" {".
Michael R

@Michael Це дивно. Вони, мабуть, видалили його у версії 4.
Каспер Сков

Привіт, Каспер Сков, я виявив, що проблема @: зовсім не пов’язана з @:. Це було пов'язано з необгрунтованим використанням @Model, у блоці @if () {}. Виправлення полягало в тому, щоб скинути знак at на Модель. Мені потрібно уникати використання @, коли вже є в області сервера. stackoverflow.com/questions/12809855/…
Michael R

38

@Html.Raw("@")мені здається навіть надійнішим @@, оскільки не у всіх випадках @@втечу.

Тому:

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

було б:

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

І як я можу використовувати це на величезному тексті з кількома абзацами? Я намагався з `замість ', але результат сумнівний. Немає помилок у порожніх рядках, а помилка на
символі`

24

Замість HTML-сутності я віддаю перевагу використанню @Html.Raw("@").


12

@@ - символ втечі для @ у видах Razor, як зазначено вище.

Однак Razor намагається розібратися, коли "@" - це просто "@" і де він позначає код C # (або VB.Net). Одне з головних застосувань для цього - ідентифікація адрес електронної пошти в режимі перегляду Бритви - не потрібно уникати символу @ в електронній пошті.


Я не знайшов способу для Razor / VB.net та використання Prismjs. Я спробував усе вище для <a href="@Url.Action("Edit", „Antigen", New With {Key .id = item.AntigenId})" class="btn-xs btn-primary"> Редагувати </ a>
JoshYates1980

8

Для питання про те @RazorCodePart1 @@ @RazorCodePart2, вам потрібно до послідовності:

@RazorCodePart1 @:@@ @RazorCodePart2

Я знаю, це виглядає дещо дивно, але це працює, і ви отримаєте буквальний символ "@" між кодовими блоками.


7

У мене просто була така ж проблема. Я оголосив змінну, розміщуючи свій текст символом @.

@{
   var twitterSite = "@MyTwitterSite";
}

...

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

Це був єдиний, хто працював для мене і був дійсним для налагоджувачів Open Graph.
Кіпріан

4

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

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

Або yoy можна використовувати: @@ 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 або зі змінною / моделлю, щоб прив’язати значення.

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


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.