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.