139

In my cshtml files I have a lot of blocks with stuff like this:

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

The only reason the span is there is because I can't find any other way to force it to recognize that "Hello World" is part of the html unless I surround it in html tags. Is there a good way to escape the code that doesn't involve adding meaningless tags to the display?

DMulligan
  • 8,993
  • 6
  • 33
  • 34

6 Answers6

247

You could use @: to escape:

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

or the special <text> tag which is not outputted in the response:

@if(Model.foo)
{
    <text>Hello World</text>
}
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
  • 1
    The second way (using ) is much better. If you use @: Razor has a habit of losing your indentation, or even worse of adding extra spaces in HMTL tags (eg
    becomes < div >), hence stopping your page working properly. I've learnt this lesson slowly and painfully - avoid @:!
    – Andy Brown Feb 16 '21 at 10:54
15
@if(Model.foo)
{
  @:Hello World
}
Sergey Metlov
  • 25,747
  • 28
  • 93
  • 153
10
<text>Explicit HTML<text>

@(Explicit C#)
Cătălin Rădoi
  • 1,804
  • 23
  • 43
10

You can add text in as below:

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

when you use @ razor switch it to code block mode. Hence you need to specify text as above.

Michał Powaga
  • 22,561
  • 8
  • 51
  • 62
matmat
  • 2,366
  • 5
  • 19
  • 23
8

many developers has provided many ways above .. here is one more which is working fine in MVC 4 .. I hope it will work for MVC 3 also ..

@if(Model.foo)
{
    @Html.Label("Hello World")
}
NMathur
  • 829
  • 1
  • 17
  • 35
2

The above answers are great. I'm going to include a link to Scott Guthrie's article on this, since it shows some more examples and explanations.

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
  • 812
  • 1
  • 10
  • 24