Recentemente ho aggiornato il mio sito web da ASP.NET MVC3 (Razor) a MVC4 (Razor2), e così facendo ho trovato quello che sembrava un cambiamento in il motore di visualizzazione Razor.Possibile modifica di rottura in MVC4 Razor che può essere riparato con "@: @"
Lo scenario (notevolmente semplificato) è illustrato di seguito.
@model IEnumerable<string>
@{ Layout = null; }
<!DOCTYPE html>
<html>
<body>
<div>
@foreach (var x in Model)
{
@string.Format("Foo bar: {0}", x) // Errors in MVC4/Razor2
}
</div>
</body>
</html>
Questo funziona bene in MVC3/Razor, ma in MVC4/Razor2 i string.Format
risultati di linea in un errore di:
imprevisto parola chiave "stringa" dopo il carattere "@". Una volta all'interno del codice, non è necessario prefisso di costrutti come "stringa" con "@".
Se si rimuove il @
, il motore di visualizzazione allora chiede che si termina la linea string.Format
con un punto e virgola. Tuttavia, ReSharper avvisa (giustamente):
Il valore restituito del metodo puro non viene utilizzato.
Le due correzioni che ho trovato per questo sono o da usare <text>
:
<text>@string.Format("The value {0}", x)</text>
O un approccio più curioso usando @:@
:
@:@string.Format("The value {0}", x)
È questo un cambiamento noto e documentato nel motore di visualizzazione Razor?
L'avvertimento da ReSharper in questo caso non è corretto, e devono essere segnalati a loro o soppressi. C'è una differenza tra il codice C# generato in fase di progettazione e in runtime, il runtime C# esegue il wrapping del string.format con un'altra chiamata al metodo, e quindi è totalmente valido. Il resharper dovrebbe ignorare questa classe di errori (e così puoi) –