Razor görünümünde dize enterpolasyonu?


93

Bu destekleniyor mu?

Eğer öyleyse, onu etkinleştirmenin bir hilesi var mı? Razor'un yeterince yeni bir derleyici kullanmadığını varsayıyorum ...? VS2015 IDE bununla iyi görünüyor ama çalışma zamanında alıyorum

CS1056: Beklenmeyen karakter '$'


Bahsettiğiniz kodu gösterebilir misiniz?
Jeroen Vannevel

Hangi ASP.NET'i kullanıyorsunuz (ASP.NET 5: .NET Core üzerine oluşturulmuş yenisi veya ASP.NET 4 güncellemesi)?
Richard

1
Teşekkür ederim! Başka birinin bunu söylediğine sevindim. Oldukça yardımcı olduğunu düşündüm ve şahsen aynı sorunu aynı çözüme sahip olan 2 kişi tanıyorum. Zaten burada kim sorumlu?
Tim Schmidt

@TimSchmidt Kapatma kuyruğu uzundur, bu nedenle bazen sorular uygunsuz bir şekilde kapatılır. Ancak yeniden açılan kuyruk kısadır, bu nedenle gerçekten yeniden açılması gerekirse oldukça hızlı olacaktır.
o11c

Yanıtlar:


125

Güncelleme :

Visual Studio 2015 Güncelleştirme 1'den başlayarak, GUI'de aşağıdaki adımları sizin için gerçekleştirebileceğiniz basit bir işlem vardır. Web projenize sağ tıklayın ve "C # 6 / VB 14'ü Etkinleştir" seçeneğini seçin. " C # 6 / VB 14'ü etkinleştirmek için yeni özellik " adlı MSDN blog gönderisinde daha fazla bilgi mevcuttur .

Bu cevap yazıldığı için bu işlevsellik bir NuGet paketinin yardımıyla eklenmiştir.

MVC5 kullanıyorsanız bu Nuget paketini çözümünüze ekleyin.

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

NuGet paketi web.config dosyanızı değiştirmelidir, ancak aşağıdaki yapılandırmanın web.config dosyanızda (ve eklenmemişse) olup olmadığını kontrol edin:

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

MVC6'da bu yerleşiktir.


Orijinal cevap:

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

Bu yalnızca MVC6 ile C # 6'da çalışır. MVC5'i C # 6 derleyicisiyle çalıştırıyor olsanız bile çalışmayacaktır.

İşin püf noktası, ustura ayrıştırıcısının henüz bazı sözdizimlerini tanıyacak kadar akıllı olmamasıdır, bu nedenle her şeyi parantez içine almanız gerekir (bunu ?., jilet görünümlerinizde null-koşullu operatör ( ) kullanırken de yapmalısınız ).

Bununla birlikte, Razor'daki dize enterpolasyonu şu anda MVC6'da biraz hatalı , bu yüzden onunla ilgili bazı sorunlar olsaydı şaşırmam. bunların ele alınıp alınmayacağı başka bir konudur.


Ah, bingo, MVC 5 kullanıyordum. Teşekkürler!
Tim Schmidt

5
MVC 5.2.3 çalışıyor, asp.net için rosyln kodu dom paketini eklemeniz yeterli. Bu yanıtı kapalı olmayan bir soruda görün: stackoverflow.com/a/31548221/637783
jbtule

1
bu arada vs hatayı güncelledi ve şimdi c # 6'nın desteklenmediğini söylüyorum, bu daha iyi
CMS

2
Web.Config'i de güncelleyen bu NuGet paketini yükledikten sonra bile, bir araç ipucu olarak şu hata mesajını alıyorum: "Özellik 'boş yayma operatörü' C # 5'te kullanılamıyor. Lütfen dil sürümü 6 veya daha üstünü kullanın."
Super Coder

1
Sağ tıklama menüsünde "C # 6 / VB 14'ü Etkinleştir" seçeneğim yoktu. Ama Visual Studio, Proje menüsünde vardı, bu yüzden oradan etkinleştirdim. Teşekkürler.
HasanG

14
  1. Projenize gerekli bir sağlayıcı eklemek için Paket Yöneticisi Konsolunda aşağıdaki komutu çalıştırınCodeDom . Gerekli ayarları web.configeklemek için dosyanızı otomatik olarak değiştirecektir CodeDom.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Tekrar başlat Visual Studio

Not: As @Jake varsa, bu cevap altında yaptığı açıklamada söz DotNetCompilerPlatformzaten paketi sadece güncelleştirilmesi gerekebilir.


Bugün doğru çözüm budur. Microsoft'un açıklamasından: 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
Senaryom için, bu paket zaten vardı, ancak 1.0.5 sürümüydü. 1.0.8 sürümüne güncelleme sorunu çözdü.
Jake

Visual Studio'yu yeniden başlatmak benim için gerekli değildi.
Johnathan Barclay

@JohnathanBarclay benim durumumda yeniden başlatma gerekliydi. Bazı insanlar için gerekli olacağını varsaymanın güvenli olduğunu düşünüyorum.
Loudenvier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.