Interpolazione delle stringhe in una vista Razor?


93

È supportato?

Se è così, c'è qualche trucco per abilitarlo? Presumo che Razor non stia usando un compilatore abbastanza nuovo ...? L'IDE VS2015 sembra andare bene con esso ma in fase di esecuzione sto ottenendo

CS1056: carattere imprevisto "$"


Puoi mostrare il codice di cui parli?
Jeroen Vannevel

Quale ASP.NET stai usando (ASP.NET 5: il nuovo costruito su .NET Core; o l'aggiornamento ad ASP.NET 4)?
Richard

6
COME È QUESTO FUORI ARGOMENTO?!?!?! Ridicolo.
Josh M.

1
Grazie! Sono contento che lo abbia detto qualcun altro. Ho pensato che fosse abbastanza utile e conosco personalmente 2 persone che hanno avuto lo stesso problema con la stessa soluzione. Comunque, chi diavolo comanda qui ??
Tim Schmidt

@TimSchmidt La coda di chiusura è lunga, quindi a volte le domande vengono chiuse in modo inappropriato. Ma la coda di riapertura è breve, quindi se dovesse davvero essere riaperta, sarà abbastanza veloce.
o11c

Risposte:


124

Aggiornamento :

A partire da Visual Studio 2015 Update 1, è disponibile un semplice processo nella GUI per eseguire i passaggi seguenti per te. Basta fare clic con il pulsante destro del mouse sul progetto Web e selezionare "Abilita C # 6 / VB 14". Ulteriori informazioni sono disponibili nel post del blog MSDN, " Nuova funzionalità per abilitare C # 6 / VB 14 ".

Da quando è stata scritta questa risposta, questa funzionalità è stata aggiunta con l'assistenza di un pacchetto NuGet.

Aggiungi questo pacchetto Nuget alla tua soluzione se stai usando MVC5.

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

Il pacchetto nuget dovrebbe modificare il tuo web.config, ma controlla che la seguente configurazione sia nel tuo file web.config (e se non lo è aggiungilo):

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

In MVC6, questo è integrato.


Risposta originale:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

Funziona solo in C # 6 con MVC6. Anche se esegui MVC5 con il compilatore C # 6, non funzionerà.

Il trucco è che il parser razor non è ancora abbastanza intelligente da riconoscere alcune sintassi, quindi devi racchiudere il tutto tra parentesi (devi farlo anche quando usi l'operatore condizionale null ( ?.) nelle tue viste razor).

Detto questo, l'interpolazione delle stringhe in Razor è un po ' buggata al momento in MVC6, quindi non sarei sorpreso se ci fossero dei problemi con esso. se verranno affrontati o meno è un'altra questione.


Ah, bingo, stavo usando MVC 5. Grazie!
Tim Schmidt

5
MVC 5.2.3 funziona, devi solo aggiungere il pacchetto dom rosyln code per asp.net. Vedere questa risposta in una domanda non chiuso: stackoverflow.com/a/31548221/637783
jbtule

1
a proposito vs aggiornato l'errore e ora dico che c # 6 non è supportato, il che è meglio
CMS

1
Anche dopo aver installato questo pacchetto NuGet che ha aggiornato anche Web.Config, ricevo ancora il seguente messaggio di errore come suggerimento: "La funzione 'operatore di propagazione null' non è disponibile in C # 5. Utilizzare la versione della lingua 6 o successiva."
Super Coder

1
Non avevo l'opzione "Abilita C # 6 / VB 14" nel menu di scelta rapida. Ma l'avevo in Visual Studio, menu Progetto, quindi l'ho abilitato da lì. Grazie.
HasanG

14
  1. Eseguire il comando seguente nella console di Gestione pacchetti per aggiungere un CodeDomprovider richiesto al progetto. Modificherà web.configautomaticamente il file per aggiungervi CodeDomle impostazioni richieste.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Ricomincia Visual Studio

Nota: come @Jake ha menzionato nel suo commento sotto questa risposta, se hai già il DotNetCompilerPlatformpacchetto potrebbe essere necessario aggiornarlo.


Questa è la soluzione corretta oggi. Dalla descrizione di Microsoft: Replacement CodeDOM providers that use the new .NET Compiler Platform ("Roslyn") compiler as a service APIs. This provides support for new language features in systems using CodeDOM (e.g. ASP.NET runtime compilation) as well as improving the compilation performance of these systems.
Luis Ferrao

1
Per il mio scenario, avevo già questo pacchetto, ma era la versione 1.0.5. L'aggiornamento alla 1.0.8 ha risolto il problema.
Jake

Il riavvio di Visual Studio non era necessario per me.
Johnathan Barclay

@ JohnathanBarclay il riavvio era necessario nel mio caso. Penso che sia lecito ritenere che sarà necessario per alcune persone.
Loudenvier
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.