Pertanyaan Interpolasi string dalam tampilan Razor?


Apakah ini didukung?

Jika demikian, apakah ada trik untuk mengaktifkannya? Saya mengasumsikan Razor tidak menggunakan compiler yang cukup baru ...? The VS2015 IDE tampaknya baik-baik saja dengan itu tetapi pada saat runtime saya mendapatkan

CS1056: Karakter '$' yang tidak terduga


76
2018-06-14 17:54


asal


Jawaban:


Memperbarui:

Mulai di 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".

Karena 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 built-in.


Jawaban asli:

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

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

Triknya adalah bahwa parser silet tidak cukup pintar untuk mengenali beberapa sintaks, jadi Anda harus membungkus semuanya dalam tanda kurung (Anda harus melakukan ini ketika menggunakan operator bersyarat-nol (?.) dalam pandangan silet Anda juga).

Yang mengatakan, interpolasi string di Razor adalah sedikit buggy saat ini di MVC6, jadi saya tidak akan terkejut jika ada beberapa masalah dengan itu. apakah mereka akan ditangani atau tidak adalah masalah lain.


103
2018-06-14 18:13



  1. Menjalankan perintah berikut di Anda Package Manager Console untuk menambahkan yang diperlukan CodeDom penyedia untuk proyek Anda. Ini juga memodifikasi Anda web.config file secara otomatis untuk menambahkan CodeDom membutuhkan pengaturan untuk itu.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. Mengulang kembali itu Visual Studio

catatan: Sebagai @Jake disebutkan dalam komentarnya di bawah jawaban ini, jika Anda punya DotNetCompilerPlatform paket sudah, Jadi cobalah untuk memperbaruinya.


9
2017-09-18 02:17