Caractere Escape @ no mecanismo de exibição de navalha

561

Estou criando um site de amostra do ASP.NET MVC 3 usando o Razor como mecanismo de exibição. A sintaxe do barbeador começa com o @personagem, por exemplo @RenderBody(). Se eu escrever @test na minha página cshtml, isso me dará um erro de análise

CS0103: O nome 'teste' não existe no contexto atual

Como faço para escapar do caractere '@'?

ajay_whiz
fonte
1
Em C #, você pode marcar palavras-chave com um @ para tratá-las como nomes de variáveis ​​em vez de palavras-chave. Com tudo o que sei, parece impossível usar palavras-chave reservadas no Razor dessa maneira.
Careta do Desespero
1
@GrimaceofDespair A maneira de ainda marcar palavras-chave como variáveis ​​é colocar o segundo @entre chaves. Eu consegui começar este trabalho por escrito desta forma:@(@new)
strizzwald

Respostas:

903

@@ deve fazê-lo.

Tobiasopdenbrouw
fonte
9
Isso não parece funcionar neste caso: @RazorCodePart1 @@ @RazorCodePart2por exemplo, um @ literal entre dois trechos de código do Razor.
Josh M.
27
tente <text> </text> ou @:
Kasper Skov
89
A melhor solução seria usar a cadeia de caracteres codificada em HTML para o caractere @: & # 64;
18123 WoIIe
9
Eu tenho uma <style>tag na minha página de barbear, que precisa incorporar uma diretiva '@media {}'; portanto, a codificação html não é uma opção; apenas @@ funciona.
Triynko
12
No href use @ ("@")
Asiri Dissanayaka 19/03/19
145

Navalha @ escape char para símbolos ...

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

ou

<img src="..." alt="Find me on twitter as @("@")username" />
Emre Karahan
fonte
3
Esse método parece o melhor, pois também funcionará para coisas do @media css, enquanto o modo de entidade HTML provavelmente não funcionará.
ChrisF
1
Agradável! Muito obrigado :)
Ashkan Sirous
1
Você acertou em cheio, obrigado :)
Pankaj Parkar
1
Funcionou bem. Obrigado.
Orion
1
Ótimo, eu encontrar este código mais fácil para que todos possam entendê-la
achecopar
39

usar <text></text>ou a maneira mais fácil@:

Kasper Skov
fonte
É estranho que a sintaxe da sequência de caracteres (no sinal de dois pontos) @: não funcione para mim, pois tento atualizar meu projeto do ASP.NET MVC 3 para o MVC4. A exceção que recebo é: "": "não é válido no início de um bloco de código Somente identificadores, palavras-chave, comentários, '(' e '{' são válidos"..
Michael R
@ Michael Isso é estranho. Eles devem ter removido a versão 4. #
Kasper Skov
Olá, Kasper Skov, achei que o @: não estava realmente relacionado a @: de todo. Isso estava relacionado ao uso desnecessário de @Model, em um bloco @if () {}. A correção foi soltar o sinal de arroba no modelo. Preciso evitar usar @ quando já estiver no escopo do servidor. stackoverflow.com/questions/12809855/…
Michael R
38

@Html.Raw("@")parece-me ainda mais confiável do que @@, uma vez que nem em todos os casos @@escapará.

Portanto:

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

seria:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">
Rosue Don-Chip Walford
fonte
E como eu uso isso em um texto enorme com vários parágrafos? Eu tentei com `em vez de", mas o resultado é questionável. Sem erros nas linhas em branco, mas com erro no caracter `.
EPurpl3
24

Em vez da entidade HTML, prefiro o uso de @Html.Raw("@").

CLRBTH
fonte
12

@@ é o caractere de escape para @ nas visualizações Razor, conforme indicado acima.

O Razor, no entanto, tenta resolver quando um '@' é apenas um '@' e onde marca o código C # (ou VB.Net). Um dos principais usos para isso é identificar endereços de email na visualização Razor - não deve ser necessário escapar do caractere @ em um endereço de email.

Alfamale
fonte
Não encontrei um caminho para o Razor / VB.net e usando o Prismjs. Eu tentei tudo acima para <a href="@Url.Action("Edit", "Antigen", Novo com {Key .id = item.AntigenId})" class="btn-xs btn-primary"> Editar </ a>
JoshYates1980
8

Para a pergunta sobre @RazorCodePart1 @@ @RazorCodePart2, você precisa da sequência:

@RazorCodePart1 @:@@ @RazorCodePart2

Eu sei, parece um pouco estranho, mas funciona e você obterá o caractere literal '@' entre os blocos de código.

DragonDTG
fonte
7

Eu apenas tive o mesmo problema. Eu declarei uma variável colocando meu texto com o @.

@{
   var twitterSite = "@MyTwitterSite";
}

...

<meta name="twitter:site" content="@twitterSite">
watfy
fonte
Este foi o único trabalhando para mim e sendo válido para depuradores do Open Graph.
Ciprian 28/05
4

esse trabalho pra mim

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

Ou você pode usar: @@ Alan_van_Buuren

: D

Alan
fonte
1

Você pode usar @@ para esse fim. Gostarvar email = firstName + '\@@' + domain;

Abdus Salam Azad
fonte
1

basta adicionar uma variável no arquivo CSHTML var myVariable = @"@";

e adicione-o ao seu layout <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>

Speedyjet
fonte
0

Eu tentei todas as opções acima e nenhuma funcionou. Isto é o que eu fiz que funcionou:

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

Eu criei uma variável de string e passei todo o código de padrão RegEx para ele, depois usei a variável no html e o Razor foi legal com ela.

folorunso joseph
fonte
0

Na verdade, @ deve ser usado com as palavras-chave da sintaxe Razor ou com a variável / modelo para vincular um valor.

Por exemplo: se teste é atribuído com valor, por exemplo, @ {var test = "ABC"}, você pode obter o valor por configurações, pois @test em qualquer lugar é a página cshtml na parte html. caso contrário, use-o como @ Html.DisplayName ("test")

Pavithra
fonte
0

Sei que essa pergunta é antiga, mas tentei todas as opções acima e não me ajudou a escapar do caractere "@" no ASP.NET full framework (MVC 5) dentro de uma URL. Porém, com base na resposta de Terje Solem, o código UTF-8 %40funcionou para mim. este é o URL original que eu estava tentando acessar:

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

e com o código:

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