Escapar @ personaje en razor view engine


561

Estoy creando un sitio de muestra ASP.NET MVC 3 usando Razor como motor de visualización. La sintaxis de la navaja comienza con el @carácter, por ejemplo @RenderBody(). Si escribo @test en mi página cshtml me da un error de análisis

CS0103: el nombre 'prueba' no existe en el contexto actual

¿Cómo escapo del personaje '@'?


1
En C #, puede marcar palabras clave con una @ para tratarlas como nombres de variables en lugar de palabras clave. Con todo lo que sé, parece imposible usar palabras clave reservadas en Razor de esta manera.
Mueca de desesperación

1
@GrimaceofDespair la forma de marcar palabras clave como variables es encerrar el segundo @entre llaves. @(@new)
Logré

Respuestas:


904

@@ Deberías hacerlo.


99
Esto no parece funcionar en este caso: @RazorCodePart1 @@ @RazorCodePart2por ejemplo, una @ literal entre dos fragmentos de código Razor.
Josh M.

27
pruebe <text> </text> o @:
Kasper Skov el

89
La mejor solución sería utilizar la cadena de caracteres codificada en HTML para el carácter @: & # 64;
WoIIe

99
Tengo una <style>etiqueta en mi página de afeitar, que tiene que incorporar una directiva '@media {}', por lo que la codificación html no es una opción; solo @@ funciona.
Triynko

12
En href use @ ("@")
Asiri Dissanayaka

145

Razor @ escape char a los símbolos ...

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

o

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

3
Este método parece el mejor, ya que también funcionará para material @media css, mientras que la forma de entidad HTML probablemente no.
ChrisF

1
¡Agradable! Muchas gracias :)
Ashkan Sirous

1
Lo has clavado, gracias :)
Pankaj Parkar

1
Funcionado bien. Gracias.
Orion

1
Gran, creo que este código sea más fácil de entender para todos que
achecopar

39

uso <text></text>o la forma más fácil@:


Es extraño que la sintaxis de secuencia de caracteres (en el signo de dos puntos) @: no funcione para mí, ya que trato de actualizar mi proyecto ASP.NET MVC 3 a MVC4. La excepción que obtengo es: "": "no es válido al comienzo de un bloque de código. Solo los identificadores, palabras clave, comentarios," ("y" {"son válidos".
Michael R

@Michael Eso es raro. Deben haberlo eliminado en la versión 4.
Kasper Skov

Hola Kasper Skov, descubrí que el problema @: en realidad no estaba relacionado con @: en absoluto. Estaba relacionado con el uso innecesario de @Model, en un bloque @if () {}. La solución fue soltar el en el signo en el modelo. Necesito evitar usar @ cuando ya estoy en el alcance del servidor. stackoverflow.com/questions/12809855/…
Michael R

38

@Html.Raw("@")Me parece ser aún más confiable que @@, ya que no en todos los casos @@se escapará.

Por lo tanto:

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

sería:

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

¿Y cómo uso esto en un texto enorme con varios párrafos? He intentado con `en lugar de" pero el resultado es cuestionable. No hay errores en las filas en blanco pero sí el error en el carácter `.
EPurpl3

24

En lugar de la entidad HTML, prefiero el uso de @Html.Raw("@").


12

@@ es el carácter de escape para @ en las vistas Razor como se indicó anteriormente.

Sin embargo, Razor intenta funcionar cuando una '@' es solo una '@' y donde marca el código C # (o VB.Net). Uno de los principales usos de esto es identificar las direcciones de correo electrónico dentro de una vista Razor; no debería ser necesario escapar del carácter @ en una dirección de correo electrónico.


No he encontrado una forma para Razor / VB.net y usando Prismjs. Intenté todo lo anterior para <a href="@Url.Action("Edit", "Antigen", Nuevo con {Key .id = item.AntigenId})" class="btn-xs btn-primary"> Editar </ a>
JoshYates1980

8

Para la pregunta sobre @RazorCodePart1 @@ @RazorCodePart2, necesitas la secuencia:

@RazorCodePart1 @:@@ @RazorCodePart2

Lo sé, parece un poco extraño, pero funciona y obtendrá el carácter literal '@' entre los bloques de código.


7

Acabo de tener el mismo problema. Declaré una variable poniendo mi texto con la @.

@{
   var twitterSite = "@MyTwitterSite";
}

...

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

Este fue el único que funcionó para mí y fue válido para los depuradores de Open Graph.
Ciprian

4

este trabajo para mi

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

O puede usar: @@ Alan_van_Buuren

:RE



1

simplemente agregue una variable en el archivo CSHTML var myVariable = @"@";

y agrégalo a tu diseño <span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>


0

Probé todas las opciones anteriores y ninguna funcionó. Esto es lo que hice que funcionó:

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

Creé una variable de cadena y le pasé todo el código del patrón RegEx, luego usé la variable en el html, y Razor fue genial con ella.



0

En realidad, @ se debe usar con las palabras clave de sintaxis Razor o con la variable / modelo para vincular un valor.

Por ejemplo: si la prueba se asigna con un valor, es decir, @ {var test = "ABC"}, puede obtener el valor mediante la configuración, ya que @test en cualquier lugar es la página cshtml en la parte html. de lo contrario, uso simple como @ Html.DisplayName ("prueba")


0

Sé que esta pregunta es antigua, pero intenté todo lo anterior y no me ayudó a escapar del carácter "@" en el marco completo ASP.NET (MVC 5) dentro de una URL. Sin embargo, según la respuesta de Terje Solem, el código UTF-8 %40funcionó para mí. esta es la URL original que intentaba alcanzar:

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

y con el código en él:

https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.