Interpolasi string dalam tampilan Razor?

93

Apakah ini didukung?

Jika ya, apakah ada trik untuk mengaktifkannya? Saya berasumsi Razor tidak menggunakan kompiler yang cukup baru ...? VS2015 IDE tampaknya baik-baik saja dengan itu tetapi pada saat runtime saya dapatkan

CS1056: Karakter tak terduga '$'

Tim Schmidt
sumber
Bisakah Anda menunjukkan kode yang Anda bicarakan?
Jeroen Vannevel
ASP.NET mana yang Anda gunakan (ASP.NET 5: yang baru dibangun di atas .NET Core; atau pembaruan ke ASP.NET 4)?
Richard
6
BAGAIMANA TOPIK Lepas INI?!?!?! Konyol.
Josh M.
1
Terima kasih! Saya senang orang lain mengatakan itu. Saya pikir itu cukup membantu dan saya pribadi tahu 2 orang yang memiliki masalah yang sama dengan solusi yang sama. Siapa sih yang bertanggung jawab di sini ??
Tim Schmidt
@TimSchmidt Antrian penutupan panjang, jadi terkadang pertanyaan ditutup dengan tidak tepat. Namun antrean buka kembali pendek, jadi jika memang harus dibuka kembali, akan berlangsung cukup cepat.
o11c

Jawaban:

124

Pembaruan :

Mulai Visual Studio 2015 Pembaruan 1, ada proses sederhana di GUI untuk melakukan langkah-langkah di bawah ini untuk Anda. Cukup klik kanan proyek web Anda dan pilih "Aktifkan C # 6 / VB 14". Informasi lebih lanjut tersedia di entri blog MSDN, " Fitur baru untuk mengaktifkan C # 6 / VB 14 ".

Sejak jawaban ini ditulis, fungsi ini telah ditambahkan dengan bantuan paket NuGet.

Tambahkan paket Nuget ini ke solusi Anda jika Anda menggunakan MVC5.

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

Paket nuget harus memodifikasi web.config Anda, tetapi periksa apakah konfigurasi berikut ada di file web.config Anda (dan jika tidak ditambahkan):

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

Di MVC6, ini sudah built-in.


Jawaban asli:

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

Ini hanya bekerja di C # 6 dengan MVC6. Bahkan jika Anda menjalankan MVC5 dengan kompiler C # 6, itu tidak akan berhasil.

Triknya adalah parser pisau cukur belum cukup pintar untuk mengenali beberapa sintaksis, jadi Anda harus membungkus semuanya dalam tanda kurung (Anda harus melakukan ini saat menggunakan operator bersyarat null ( ?.) dalam tampilan pisau cukur Anda juga).

Meskipun demikian , interpolasi string di Razor saat ini agak bermasalah di MVC6, jadi saya tidak akan terkejut jika ada beberapa masalah dengannya. apakah mereka akan ditangani atau tidak adalah masalah lain.

vcsjones.dll
sumber
Ah, bingo, saya menggunakan MVC 5. Terima kasih!
Tim Schmidt
5
MVC 5.2.3 berfungsi, Anda hanya perlu menambahkan paket dom kode rosyln untuk asp.net. Lihat jawaban ini di pertanyaan non-tertutup: stackoverflow.com/a/31548221/637783
jbtule
1
omong-omong vs memperbarui kesalahan dan sekarang saya mengatakan bahwa c # 6 tidak didukung, mana yang lebih baik
CMS
1
Bahkan setelah menginstal paket NuGet ini yang juga memperbarui Web.Config, saya masih mendapatkan pesan kesalahan berikut sebagai tip alat: "Fitur 'operator propagasi null' tidak tersedia di C # 5. Harap gunakan bahasa versi 6 atau lebih tinggi."
Super Coder
1
Saya tidak memiliki opsi "Aktifkan C # 6 / VB 14" di menu klik kanan. Tapi saya memilikinya di Visual Studio, menu Project jadi saya telah mengaktifkannya dari sana. Terima kasih.
HasanG
14
  1. Jalankan perintah berikut di Package Manager Console untuk menambahkan CodeDompenyedia yang diperlukan ke proyek Anda. Ini akan mengubah web.configfile Anda secara otomatis untuk menambahkan CodeDompengaturan yang diperlukan ke dalamnya.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Mengulang kembali Visual Studio

Catatan: Seperti yang disebutkan @Jake dalam komentarnya di bawah jawaban ini, jika Anda sudah memiliki DotNetCompilerPlatformpaketnya, mungkin hanya perlu diperbarui.

RAM
sumber
Ini adalah solusi yang tepat hari ini. Dari deskripsi 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
Untuk skenario saya, saya sudah memiliki paket ini, tetapi itu versi 1.0.5. Memperbarui ke 1.0.8 menyelesaikan masalah.
Jake
Saya tidak perlu memulai ulang Visual Studio.
Johnathan Barclay
@JohnathanBarclay restart diperlukan dalam kasus saya. Saya pikir aman untuk berasumsi bahwa ini perlu bagi sebagian orang.
Loudenvier