Interpolacja ciągów w widoku Razor?


93

Czy to jest obsługiwane?

Jeśli tak, czy jest jakaś sztuczka, aby to włączyć? Zakładam, że Razor nie używa wystarczająco nowego kompilatora ...? IDE VS2015 wydaje się być w porządku, ale w czasie wykonywania dostaję

CS1056: Nieoczekiwany znak „$”


Czy możesz pokazać kod, o którym mówisz?
Jeroen Vannevel

Którego programu ASP.NET używasz (ASP.NET 5: nowy oparty na platformie .NET Core; czy aktualizacja ASP.NET 4)?
Richard

1
Dziękuję Ci! Cieszę się, że ktoś inny to powiedział. Pomyślałem, że to bardzo pomocne i osobiście znam 2 osoby, które miały ten sam problem z tym samym rozwiązaniem. Kto tu w ogóle rządzi?
Tim Schmidt

@TimSchmidt Kolejka zamykania jest długa, więc czasami pytania są zamykane nieprawidłowo. Ale kolejka ponownego otwarcia jest krótka, więc jeśli naprawdę należy ją ponownie otworzyć, będzie to dość szybko.
o11c

Odpowiedzi:


125

Aktualizacja :

Począwszy od Visual Studio 2015 Update 1, w graficznym interfejsie użytkownika istnieje prosty proces, aby wykonać poniższe kroki. Po prostu kliknij prawym przyciskiem myszy projekt sieci Web i wybierz opcję „Włącz C # 6 / VB 14”. Więcej informacji można znaleźć w poście na blogu MSDN „ Nowa funkcja umożliwiająca włączenie języka C # 6 / VB 14 ”.

Ponieważ ta odpowiedź została napisana, ta funkcja została dodana przy pomocy pakietu NuGet.

Dodaj ten pakiet Nuget do rozwiązania, jeśli używasz MVC5.

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

Pakiet nuget powinien modyfikować plik web.config, ale sprawdź, czy następująca konfiguracja znajduje się w pliku web.config (i jeśli nie jest dodawany):

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

W MVC6 jest to wbudowane.


Oryginalna odpowiedź:

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

Działa to tylko w C # 6 z MVC6. Nawet jeśli używasz MVC5 z kompilatorem C # 6, to nie zadziała.

Sztuczka polega na tym, że parser maszynki do golenia nie jest jeszcze wystarczająco inteligentny, aby rozpoznać niektóre składnie, więc musisz zawinąć całość w nawiasy (musisz to zrobić również, gdy używasz operatora warunkowego zerowego ( ?.) w widokach maszynki do golenia).

To powiedziawszy, interpolacja ciągów w Razor jest w tej chwili nieco błędna w MVC6, więc nie zdziwiłbym się, gdyby były z nią jakieś problemy. to, czy zostaną omówione, to inna sprawa.


Ach, bingo, używałem MVC 5. Dzięki!
Tim Schmidt

5
MVC 5.2.3 działa, wystarczy dodać pakiet dom Rosyln code dla asp.net. Zobacz tę odpowiedź w niezamkniętym pytaniu: stackoverflow.com/a/31548221/637783
jbtule

1
przy okazji vs zaktualizowałem błąd i teraz mówię, że c # 6 nie jest obsługiwany, co jest lepsze
CMS

2
Nawet po zainstalowaniu tego pakietu NuGet, który zaktualizował również plik Web.Config, nadal otrzymuję następujący komunikat o błędzie jako wskazówkę dotyczącą narzędzia: „Funkcja„ operator propagacji wartości null ”nie jest dostępna w języku C # 5. Użyj wersji językowej 6 lub nowszej.”
Super Coder

1
Nie miałem opcji „Włącz C # 6 / VB 14” w menu prawym przyciskiem myszy. Ale miałem to w Visual Studio, menu Projekt, więc włączyłem to stamtąd. Dzięki.
HasanG

14
  1. Uruchom następujące polecenie w konsoli Menedżera pakietów, aby dodać wymaganego CodeDomdostawcę do projektu. web.configAutomatycznie zmodyfikuje plik, aby dodać do niego CodeDomwymagane ustawienia.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Uruchom ponownie Visual Studio

Uwaga: Jak wspomniał @Jake w swoim komentarzu pod tą odpowiedzią, jeśli masz DotNetCompilerPlatformjuż pakiet, może wymagać aktualizacji.


To jest dziś poprawne rozwiązanie. Z opisu Microsoftu: 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
W moim scenariuszu miałem już ten pakiet, ale była to wersja 1.0.5. Aktualizacja do wersji 1.0.8 rozwiązała problem.
Jake,

Ponowne uruchamianie programu Visual Studio nie było dla mnie konieczne.
Johnathan Barclay,

@JohnathanBarclay ponowne uruchomienie było konieczne w moim przypadku. Myślę, że można bezpiecznie założyć, że dla niektórych będzie to konieczne.
Loudenvier
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.