MVC3 Razor: HTML in Codeblöcken anzeigen

131

In meinen cshtml-Dateien habe ich viele Blöcke mit solchen Dingen:

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

Der einzige Grund, warum die Spanne vorhanden ist, ist, dass ich keinen anderen Weg finden kann, um zu erzwingen, dass "Hello World" Teil des HTML-Codes ist, es sei denn, ich umgeben ihn mit HTML-Tags. Gibt es eine gute Möglichkeit, dem Code zu entkommen, bei dem der Anzeige keine bedeutungslosen Tags hinzugefügt werden?

DMulligan
quelle

Antworten:

226

Sie könnten verwenden @:, um zu entkommen:

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

oder das spezielle <text>Tag, das nicht in der Antwort ausgegeben wird:

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

Sie können Text wie folgt hinzufügen:

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

Wenn Sie @Rasiermesser verwenden, schalten Sie es in den Codeblock-Modus. Daher müssen Sie den Text wie oben angeben.

matmat
quelle
8
<text>Explicit HTML<text>

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

Viele Entwickler haben oben viele Möglichkeiten angegeben. Hier ist eine weitere, die in MVC 4 einwandfrei funktioniert. Ich hoffe, dass sie auch für MVC 3 funktioniert.

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

Die obigen Antworten sind großartig. Ich werde einen Link zu Scott Guthries Artikel dazu einfügen, da er einige weitere Beispiele und Erklärungen enthält.

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
quelle