MVC3 Razor: wyświetlanie html w blokach kodu

131

W moich plikach cshtml mam wiele bloków z takimi rzeczami:

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

Jedynym powodem jest to, że nie mogę znaleźć innego sposobu, aby zmusić go do rozpoznania, że ​​„Hello World” jest częścią html, chyba że otoczę go tagami HTML. Czy istnieje dobry sposób na ucieczkę przed kodem, który nie wymaga dodawania bezsensownych tagów do wyświetlacza?

DMulligan
źródło

Odpowiedzi:

230

Możesz użyć @:do ucieczki:

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

lub specjalny <text>znacznik, który nie jest wyprowadzany w odpowiedzi:

@if(Model.foo)
{
    <text>Hello World</text>
}
Darin Dimitrov
źródło
14
@if(Model.foo)
{
  @:Hello World
}
Siergiej Metłow
źródło
10

Możesz dodać tekst jak poniżej:

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

kiedy używasz @maszynki do golenia, przełącz ją na tryb blokowania kodu. Dlatego musisz określić tekst jak powyżej.

matmat
źródło
9
<text>Explicit HTML<text>

@(Explicit C#)
Cătălin Rădoi
źródło
8

wielu programistów udostępniło powyżej wiele sposobów ... oto jeszcze jeden, który działa dobrze w MVC 4 .. Mam nadzieję, że będzie działał również z MVC 3 ..

@if(Model.foo)
{
    @Html.Label("Hello World")
}
NMathur
źródło
0

Powyższe odpowiedzi są świetne. Zamierzam zamieścić link do artykułu Scotta Guthrie na ten temat, ponieważ zawiera on więcej przykładów i wyjaśnień.

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
źródło