2015-10-16 17 views
33

Böylece C# 6.0 ortaya çıktığında, boş koşullu operatörü çok fazla kullanıyorum. Örnek:ASP.NET MVC Razor'daki yeni boş koşullu işleci

Model?.Person?.Zip 

Ancak, şimdi müşteri görünümünde alanı modellerinde faaliyet gösteren bir çözüme sahip bir durum var. Geliştiriciyi bir balta ile avlarken, görünüşte sadece bazı boş çekler yapmayı daha kolay buluyorum. Ancak

, bu Razor gitmek:

@Model?.Person?.Zip 

Benim Model? olarak dinamik görülür, ancak ? dinamik şeyler kırar ve geri kalan metin olarak oluşturulur.

Bunu nasıl çözersiniz?

+12

Sadece bir tahmin @ (Model? .Person? .Zip) –

+2

@DieterB Haha, bu çok basit ... VE İŞÇİLDİ. Muhteşem. Benim gibi aptal olan gelecekteki tüm Google çalışanları için bir cevap verebilir misiniz? –

+0

Tamam. Onay için Thnx ;-) –

cevap

52

Sadece bir tahmin bazı ek tamlığı (Microsoft ASP.NET ekibi olarak çalışma) için

@(Model?.Person?.Zip) 
+1

Benim için çalışmıyor –

+0

Neyin çalışmadığı hakkında daha fazla bilgi verebilir misiniz? Kodunuzun örneği –

+0

Bu, Kees konusunu düzeltebilir: http://stackoverflow.com/questions/27968963/c-sharp-6-0-features-not-working-with-visual-studio-2015 –

17

: Dieter B (ve bazı diğerleri) gibi

doğru not @(Model?.Person?.Zip) çalışacaktır.

@(...) sözdizimi, hangi kodun ifade olarak ayrıştırılacağı konusunda çok daha fazla esneklik sağlayan bir "çıkış sözdizimi" olarak düşünülebilir.

Razor'un şu anki sürümü oluşturulduğunda, yalnızca C# 5 civarındaydı, bu nedenle yeni C# 6 sözdizimleri doğrudan desteklenmiyordu.

ASP.NET ekibi, C# 6 için Razor v4'ün (ASP.NET 5/MVC 6'da kullanılan) desteğini Razor v3'e geri yüklemek istiyor (ASP.NET 4.x/MVC'de kullanılır) 5).

+0

Yanılıyorsam, gerçekten bir kaçış karakteri değil, daha ziyade "?" temel C# değil. @() Ile ustura, parantezler arasındaki her şeyin C# kodu olduğunu bilir. Çeşitli satırlar boyunca uzayabilir, böylece tüm hesaplamaları bu bloklarda yapabilirsiniz (evet, hatta 1 sayfada bile) –

+0

Gerçekten de sizler, bir "kaçış karakteri" değildir. Sadece Jilet ayrıştırıcısının ne kadar "düşünme" yapması gerektiğini basitleştiriyor, çünkü C# 'yı yapması gerekmedikçe C# ayrıştırmıyor. '@ (...)' kullanarak sadece temel alıntı/paren eşleştirmesi ve biraz daha fazlası gerekir. – Eilon