Interpolação de strings em uma visualização do Razor?

93

Isso é compatível?

Em caso afirmativo, existe algum truque para ativá-lo? Estou assumindo que o Razor não está usando um compilador novo o suficiente ...? O IDE VS2015 parece estar bem com ele, mas em tempo de execução estou conseguindo

CS1056: Caráter inesperado '$'

Tim Schmidt
fonte
Você pode mostrar o código de que está falando?
Jeroen Vannevel
Qual ASP.NET você está usando (ASP.NET 5: o novo desenvolvido no .NET Core; ou a atualização para ASP.NET 4)?
Richard
6
COMO É ESTE TÓPICO OFF?!?!?! Ridículo.
Josh M.
1
Obrigado! Estou feliz que outra pessoa disse isso. Achei muito útil e conheço pessoalmente 2 pessoas que tiveram o mesmo problema com a mesma solução. Quem diabos está no comando aqui?
Tim Schmidt
@TimSchmidt A fila de fechamento é longa, então às vezes as perguntas são fechadas de forma inadequada. Mas a fila de reabertura é curta, então se ela realmente precisar ser reaberta, será bem rápido.
11c

Respostas:

124

Atualização :

A partir da Atualização 1 do Visual Studio 2015, há um processo simples na GUI para executar as etapas abaixo para você. Simplesmente clique com o botão direito em seu projeto da web e selecione "Ativar C # 6 / VB 14". Mais informações estão disponíveis na postagem do blog do MSDN, " Novo recurso para habilitar C # 6 / VB 14 ".

Desde que esta resposta foi escrita, essa funcionalidade foi adicionada com a ajuda de um pacote NuGet.

Adicione este pacote Nuget à sua solução se estiver usando MVC5.

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

O pacote nuget deve modificar seu web.config, mas verifique se a seguinte configuração está em seu arquivo web.config (e se não estiver, adicione-o):

  <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>

No MVC6, isso é integrado.


Resposta original:

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

Isso só funciona em C # 6 com MVC6. Mesmo se você estiver executando MVC5 com o compilador C # 6, ele não funcionará.

O truque é que o analisador razor ainda não é inteligente o suficiente para reconhecer algumas sintaxes, então você deve colocar tudo entre parênteses (você deve fazer isso ao usar o operador nulo-condicional ( ?.) em suas visualizações de navalha também).

Dito isso, a interpolação de strings no Razor é um pouco problemática no momento no MVC6, então eu não ficaria surpreso se houvesse alguns problemas com isso. se eles serão ou não tratados é outra questão.

vcsjones
fonte
Ah, bingo, eu estava usando MVC 5. Obrigado!
Tim Schmidt de
5
MVC 5.2.3 funciona, você só precisa adicionar o pacote dom de código rosyln para asp.net. Veja esta resposta em uma pergunta não fechada: stackoverflow.com/a/31548221/637783
jbtule
1
a propósito vs atualizei o erro e agora digo que c # 6 não é compatível, o que é melhor
CMS
1
Mesmo depois de instalar este pacote NuGet que atualizou o Web.Config também, ainda recebo a seguinte mensagem de erro como uma dica de ferramenta: "O recurso 'operador de propagação nula' não está disponível em C # 5. Use a versão 6 do idioma ou superior."
Super Coder
1
Eu não tinha a opção "Ativar C # 6 / VB 14" no menu do botão direito. Mas eu tinha no Visual Studio, menu Projeto, então habilitei a partir daí. Obrigado.
HasanG
14
  1. Execute o seguinte comando no console do gerenciador de pacotes para adicionar um CodeDomprovedor necessário ao seu projeto. Ele modificará seu web.configarquivo automaticamente para adicionar CodeDomas configurações necessárias a ele.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Reiniciar Visual Studio

Nota: Como @Jake mencionou em seu comentário sob esta resposta, se você já tem o DotNetCompilerPlatformpacote, ele só precisa ser atualizado.

RAM
fonte
Esta é a solução correta hoje. Da descrição da 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
Para o meu cenário, eu já tinha esse pacote, mas era a versão 1.0.5. Atualizar para 1.0.8 resolveu o problema.
Jake
Reiniciar o Visual Studio não era necessário para mim.
Johnathan Barclay
@JohnathanBarclay o reinício foi necessário no meu caso. Acho que é seguro presumir que será necessário para algumas pessoas.
Loudenvier