Escape @ в движке Razor View Engine

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

CS0103: Имя "тест" не существует в текущем контексте.

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


person ajay_whiz    schedule 02.09.2010    source источник
comment
В C # вы можете помечать ключевые слова знаком @, чтобы рассматривать их как имена переменных, а не как ключевые слова. Насколько мне известно, такое использование зарезервированных ключевых слов в Razor кажется невозможным.   -  person Grimace of Despair    schedule 15.07.2013
comment
@GrimaceofDespair способ по-прежнему отмечать ключевые слова как переменные заключается в том, чтобы заключить вторую @ в фигурные скобки. Мне удалось заставить это работать, написав это так: @(@new)   -  person strizzwald    schedule 18.10.2018


Ответы (15)


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

person Tobiasopdenbrouw    schedule 02.09.2010
comment
В данном случае это не работает: @RazorCodePart1 @@ @RazorCodePart2 например. литерал @ между двумя фрагментами кода Razor. - person Josh M.; 15.06.2011
comment
Лучшим решением было бы использовать строку символов в кодировке HTML для символа @: @ - person WΩLLE - ˈvɔlə; 18.12.2013
comment
У меня есть тег <style> на моей странице razor, который должен включать директиву '@media {}', поэтому кодировка html не подходит; работает только @@. - person Triynko; 04.10.2016
comment
@WoIIe отсутствует в URL-адресе. - person Machado; 22.08.2017
comment
Это не работает. Я перепробовал все решения на этой странице. Ни один из них у меня не работает: / - person zolty13; 02.07.2018
comment
В href используйте @ (@) - person Asiri Dissanayaka; 19.03.2019

Razor @ escape char в символы ...

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

or

<img src="..." alt="Find me on twitter as @("@")username" />
person Emre Karahan    schedule 29.01.2013
comment
Этот метод кажется лучшим, поскольку он также будет работать с материалами @media css, тогда как способ сущности HTML, вероятно, не будет. - person ChrisF; 31.01.2014
comment
Отлично! Большое спасибо :) - person Ashkan Sirous; 15.09.2016
comment
Вы справились, спасибо :) - person Pankaj Parkar; 23.07.2017
comment
Сработало хорошо. Спасибо. - person Orion; 22.04.2018
comment
Отлично, мне этот код легче понять всем - person achecopar; 05.02.2019

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

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

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

было бы:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">
person Rosue Don-Chip Walford    schedule 25.03.2016
comment
И как мне использовать это для огромного текста с несколькими абзацами? Я пробовал использовать `вместо, но результат сомнительный. Нет ошибок в пустых строках, но есть ошибка в символе. - person EPurpl3; 23.12.2019

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

person Kasper Skov    schedule 14.07.2011
comment
Странно, что (знак двоеточия) синтаксис последовательности символов @: у меня не работает, когда я пытаюсь обновить свой проект ASP.NET MVC 3 до MVC4. Исключение, которое я получаю: недопустимо в начале блока кода. Действительны только идентификаторы, ключевые слова, комментарии (и {. - person Michael R; 23.07.2014
comment
@ Майкл Это странно. Должно быть, они удалили его в версии 4. - person Kasper Skov; 23.07.2014
comment
Привет, Каспер Сков, я обнаружил, что проблема с @: вообще не связана с @:. Это было связано с ненужным использованием @Model в блоке @if () {}. Исправление заключалось в том, чтобы на модели не отображался знак at. Мне нужно избегать использования @, когда он уже находится в области сервера. stackoverflow.com/questions/12809855/ - person Michael R; 23.07.2014

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

person CLRBTH    schedule 30.03.2014

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

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

person Alfamale    schedule 13.09.2010
comment
Я не нашел способа использовать Razor / VB.net и Prismjs. Я пробовал все выше для ‹a [email protected](Edit, Antigen, New With {Key .id = item.AntigenId}) class=btn-xs btn-primary› Edit ‹/a› - person JoshYates1980; 16.06.2017

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

@RazorCodePart1 @:@@ @RazorCodePart2

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

person DragonDTG    schedule 07.10.2011

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

@{
   var twitterSite = "@MyTwitterSite";
}

...

<meta name="twitter:site" content="@twitterSite">
person watfy    schedule 22.03.2015
comment
Это был единственный, который работал у меня и действовал для отладчиков Open Graph. - person Ciprian; 28.05.2018

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

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

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

:D

person Alan    schedule 22.01.2016

Я попробовал все варианты, указанные выше, и ни один из них не помог. Вот что я сделал, что сработало:

@{
    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 с этим справился.

person folorunso joseph    schedule 27.10.2015

Для этой цели вы можете использовать @@. Нравится var email = firstName + '\@@' + domain;

person Abdus Salam Azad    schedule 24.11.2016

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

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

person Speedyjet    schedule 06.10.2017

Я не мог заставить ни один из них работать внутри моего атрибута заполнителя, поэтому я использовал специальный символ 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

person Terje Solem    schedule 27.01.2018
comment
Мне нужно было добавить @ в метатег. и это прекрасно работает. @@ там не работает. - person Asiri Dissanayaka; 10.07.2018

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

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

вот что у меня сработало в моем коде:

https://unpkg.com/%40google/[email protected]/dist/markerclustererplus.min.js
person Hector Soto    schedule 03.03.2020

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

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

person Pavithra    schedule 25.06.2018