MVC3 Razor: visualización de html dentro de bloques de código

131

En mis archivos cshtml tengo muchos bloques con cosas como esta:

@if(Model.foo)
{
    <span>Hello World</span>
}

La única razón por la que existe el lapso es porque no puedo encontrar otra forma de obligarlo a reconocer que "Hello World" es parte del html a menos que lo rodee con etiquetas html. ¿Hay una buena manera de escapar del código que no implica agregar etiquetas sin sentido a la pantalla?

DMulligan
fuente

Respuestas:

226

Podrías usar @:para escapar:

@if(Model.foo)
{
    @:Hello World
}

o la <text>etiqueta especial que no se muestra en la respuesta:

@if(Model.foo)
{
    <text>Hello World</text>
}
Darin Dimitrov
fuente
14
@if(Model.foo)
{
  @:Hello World
}
Sergey Metlov
fuente
10

Puede agregar texto de la siguiente manera:

@if(Model.foo)
{
    @:Hello World
}

cuando usa la @maquinilla de afeitar, cambie al modo de bloqueo de código. Por lo tanto, debe especificar el texto como arriba.

matmat
fuente
8
<text>Explicit HTML<text>

@(Explicit C#)
Cătălin Rădoi
fuente
8

muchos desarrolladores han proporcionado muchas formas anteriores ... aquí hay una más que funciona bien en MVC 4 ... Espero que también funcione para MVC 3 ...

@if(Model.foo)
{
    @Html.Label("Hello World")
}
NMathur
fuente
0

Las respuestas anteriores son geniales. Voy a incluir un enlace al artículo de Scott Guthrie sobre esto, ya que muestra más ejemplos y explicaciones.

https://weblogs.asp.net/scottgu/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax

@if (p.UnitsInStock == 0 {
  <text>
    Donec in ante vitae purus consequat laoreet ut elementum
    purus. Ut ut tempus nulla, quis ultrices est. Integer
    pharetra ante in lectus porta, a lacinia ex faucibus. 
    Aliquam magna risus, pretium vel neque at, laoreet 
    ultrices lectus. Morbi posuere luctus risus. Nullam 
    tincidunt massa egestas nunc tempor scelerisque.  
  </text>
}


@if (p.UnitsInStock == 0 {
  @: Line 1
  @: Line 2
  @: Line 3
}

Eric Burdo
fuente