MVC3 Razor: exibindo html dentro de blocos de código

131

Nos meus arquivos cshtml, tenho muitos blocos com coisas assim:

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

A única razão pela qual a extensão existe é porque não consigo encontrar outra maneira de forçá-lo a reconhecer que "Hello World" faz parte do html, a menos que eu o envolva em tags html. Existe uma boa maneira de escapar do código que não envolve a adição de tags sem sentido à exibição?

DMulligan
fonte

Respostas:

226

Você pode usar @:para escapar:

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

ou a <text>tag especial que não é emitida na resposta:

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

Você pode adicionar texto como abaixo:

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

quando você usa @navalha, mude para o modo de bloqueio de código. Portanto, você precisa especificar o texto como acima.

matmat
fonte
8
<text>Explicit HTML<text>

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

muitos desenvolvedores forneceram várias maneiras acima .. aqui está mais uma que está funcionando bem no MVC 4 .. Espero que funcione para o MVC 3 também ..

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

As respostas acima são ótimas. Vou incluir um link para o artigo de Scott Guthrie sobre isso, pois mostra mais alguns exemplos e explicações.

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
fonte