การแก้ไขสตริงในมุมมองมีดโกน?


93

สิ่งนี้รองรับหรือไม่

ถ้าเป็นเช่นนั้นมีเคล็ดลับในการเปิดใช้งานหรือไม่? ฉันสมมติว่า Razor ไม่ได้ใช้คอมไพเลอร์ใหม่เพียงพอ ... ? VS2015 IDE ดูเหมือนจะใช้ได้ แต่ในขณะรันไทม์ฉันได้รับ

CS1056: อักขระที่ไม่คาดคิด '$'


คุณสามารถแสดงรหัสที่คุณกำลังพูดถึงได้หรือไม่?
Jeroen Vannevel

คุณใช้ ASP.NET ใด (ASP.NET 5: อันใหม่ที่สร้างขึ้นบน. NET Core หรือการอัปเดต ASP.NET 4)
Richard

1
ขอขอบคุณ! ดีใจที่มีคนพูดแบบนั้น ฉันคิดว่ามันเป็นประโยชน์มากและฉันเองก็รู้จักคน 2 คนที่มีปัญหาเดียวกันกับวิธีแก้ปัญหาเดียวกัน ใครเป็นผู้รับผิดชอบที่นี่?
Tim Schmidt

@TimSchmidt คิวปิดยาวดังนั้นบางครั้งคำถามจึงถูกปิดอย่างไม่เหมาะสม แต่คิวการเปิดใหม่นั้นสั้นดังนั้นถ้าจะเปิดใหม่จริงๆก็จะเร็วพอสมควร
o11c

คำตอบ:


125

อัปเดต :

เริ่มต้นใน Visual Studio 2015 Update 1 มีกระบวนการง่ายๆใน GUI เพื่อทำตามขั้นตอนด้านล่างสำหรับคุณ เพียงคลิกขวาที่โครงการเว็บของคุณแล้วเลือก "เปิดใช้งาน C # 6 / VB 14" ดูข้อมูลเพิ่มเติมได้ในบล็อกโพสต์ของ MSDN " คุณลักษณะใหม่ในการเปิดใช้งาน C # 6 / VB 14 "

เนื่องจากคำตอบนี้ถูกเขียนขึ้นจึงมีการเพิ่มฟังก์ชันนี้ด้วยความช่วยเหลือของแพ็คเกจ NuGet

เพิ่มแพ็คเกจ Nuget นี้ลงในโซลูชันของคุณหากคุณใช้ MVC5

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

แพ็คเกจ nuget ควรแก้ไข web.config ของคุณ แต่ตรวจสอบว่าการกำหนดค่าต่อไปนี้อยู่ในไฟล์ web.config ของคุณ (และหากไม่ได้เพิ่มเข้าไป)

  <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 สิ่งนี้มีอยู่ในตัว


คำตอบเดิม:

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

ใช้ได้เฉพาะใน C # 6 กับ MVC6 แม้ว่าคุณจะเรียกใช้ MVC5 ด้วยคอมไพเลอร์ C # 6 ก็จะไม่ทำงาน

เคล็ดลับคือตัวแยกวิเคราะห์มีดโกนยังไม่ฉลาดพอที่จะจดจำไวยากรณ์บางอย่างดังนั้นคุณต้องรวมสิ่งทั้งหมดไว้ในวงเล็บ (คุณต้องทำสิ่งนี้เมื่อใช้ตัวดำเนินการเงื่อนไขว่าง ( ?.) ในมุมมองมีดโกนของคุณด้วย)

ที่กล่าวว่าการแก้ไขสตริงใน Razor นั้นค่อนข้างบั๊กในตอนนี้ใน MVC6 ดังนั้นฉันจะไม่แปลกใจถ้ามีปัญหากับมัน ไม่ว่าจะเป็นเรื่องอื่นหรือไม่


อาบิงโกฉันใช้ MVC 5 ขอบคุณ!
Tim Schmidt

5
MVC 5.2.3 ใช้งานได้คุณเพียงแค่เพิ่มแพ็คเกจ rosyln code dom สำหรับ asp.net ดูคำตอบนี้ในคำถามที่ไม่ปิด: stackoverflow.com/a/31548221/637783
jbtule

1
โดยวิธีเทียบกับอัปเดตข้อผิดพลาดและตอนนี้ฉันบอกว่าไม่รองรับ c # 6 ซึ่งดีกว่า
CMS

2
แม้ว่าหลังจากติดตั้งแพ็คเกจ NuGet ซึ่งอัปเดต Web.Config แล้วฉันก็ยังได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้เป็นเคล็ดลับเครื่องมือ: "ฟีเจอร์ 'ตัวดำเนินการเผยแพร่ค่าว่าง' ไม่มีใน C # 5 โปรดใช้ภาษาเวอร์ชัน 6 ขึ้นไป"
Super Coder

1
ฉันไม่มีตัวเลือก "เปิดใช้งาน C # 6 / VB 14" ในเมนูคลิกขวา แต่ฉันมีใน Visual Studio เมนูโครงการดังนั้นฉันจึงเปิดใช้งานจากที่นั่น ขอบคุณ.
HasanG

14
  1. รันคำสั่งต่อไปนี้ในPackage Manager Consoleเพื่อเพิ่มCodeDomผู้ให้บริการที่จำเป็นในโปรเจ็กต์ของคุณ มันจะแก้ไขweb.configไฟล์ของคุณโดยอัตโนมัติเพื่อเพิ่มCodeDomการตั้งค่าที่จำเป็นลงไป

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. เริ่มต้นใหม่ Visual Studio

หมายเหตุ:ในฐานะที่เป็น@Jakeกล่าวถึงในความคิดเห็นของเขาภายใต้คำตอบนี้ถ้าคุณมีDotNetCompilerPlatformแพคเกจแล้วมันก็อาจต้องมีการปรับปรุง


นี่คือวิธีแก้ปัญหาที่ถูกต้องในปัจจุบัน จากคำอธิบายของ 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
สำหรับสถานการณ์ของฉันฉันมีแพ็คเกจนี้อยู่แล้ว แต่เป็นเวอร์ชัน 1.0.5 การอัปเดตเป็น 1.0.8 ช่วยแก้ปัญหาได้
Jake

การรีสตาร์ท Visual Studio ไม่จำเป็นสำหรับฉัน
Johnathan Barclay

@JohnathanBarclay การรีสตาร์ทเป็นสิ่งที่จำเป็นในกรณีของฉัน ฉันคิดว่ามันปลอดภัยที่จะคิดว่ามันจำเป็นสำหรับบางคน
Loudenvier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.