2015-10-16 23 views
33

Vì vậy, kể từ khi C# 6.0 xuất hiện, tôi đã sử dụng toán tử null có điều kiện khá nhiều. Ví dụ:Toán tử null-điều kiện mới trong ASP.NET MVC Razor

Model?.Person?.Zip 

Tuy nhiên, bây giờ tôi có một giải pháp mà khách hàng hoạt động trên mô hình miền trong chế độ xem. Trong khi tôi sẽ săn lùng các nhà phát triển với một cái rìu, tôi thấy nó dễ dàng hơn để thực hiện một số kiểm tra null trong khung nhìn.

Tuy nhiên, khi tôi đi này trong Razor:

@Model?.Person?.Zip 

My Model? được coi là năng động, nhưng ? phá vỡ những điều động và phần còn lại được trả lại dưới dạng văn bản.

Bạn giải quyết vấn đề này bằng cách nào?

+12

Chỉ cần đoán @ (Mô hình? .Person? .Zip) –

+2

@DieterB Haha, điều đó thật đơn giản ... VÀ NÓ LÀM VIỆC. Tuyệt vời. Bạn có thể đặt câu trả lời cho tất cả những người dùng Google trong tương lai, những người ngu ngốc như tôi không? –

+0

Xong. Thnx để xác nhận ;-) –

Trả lời

52

Chỉ cần một đoán

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

Không hoạt động cho tôi –

+0

Bạn có thể cung cấp thêm thông tin về những gì không hoạt động không? Ví dụ về mã của bạn? –

+0

Điều này có thể khắc phục sự cố cho Kees: http://stackoverflow.com/questions/27968963/c-sharp-6-0-features-not-working-with-visual-studio-2015 –

17

Đối với một số tính hoàn chỉnh bổ sung (Tôi làm việc trong nhóm ASP.NET của Microsoft):

Như Dieter B (và một số người khác) lưu ý một cách chính xác, @(Model?.Person?.Zip) sẽ làm việc.

Cú pháp @(...) có thể được coi là "cú pháp thoát" cho phép linh hoạt hơn nhiều về mặt mã sẽ được phân tích cú pháp làm biểu thức.

Khi phiên bản Razor hiện tại được tạo, chỉ có C# 5 là xung quanh, vì vậy các cú pháp C# 6 mới không được hỗ trợ trực tiếp.

Nhóm ASP.NET đang tìm cách quay lại một số dao cạo v4 (được sử dụng trong ASP.NET 5/MVC 6) hỗ trợ cho C# 6 quay lại Razor v3 (được sử dụng trong ASP.NET 4.x/MVC 5).

+0

Nếu tôi đúng, đó là không thực sự là một nhân vật trốn thoát, mà đúng hơn là "?" không phải là C# cơ bản. Với @(), dao cạo biết rằng mọi thứ giữa các dấu ngoặc là mã C#. Nó có thể mở rộng trên nhiều dòng khác nhau, vì vậy bạn có thể thực hiện toàn bộ các phép tính trong các khối này (vâng, ngay cả trên 1 trang) –

+0

Thực ra bạn là đúng, nó không phải là "ký tự thoát". Nó chỉ đơn giản hóa bao nhiêu "suy nghĩ" các trình phân tích cú pháp Razor cần phải làm vì nó không phân tích cú pháp C# trừ khi nó có. Bằng cách sử dụng '@ (...)', nó chỉ phải thực hiện lệnh trích dẫn cơ bản/paren cơ bản và ít hơn nữa. – Eilon

Các vấn đề liên quan