Tất cả quá thường xuyên tôi gặp phải tình huống trong đó chế độ xem trong dự án của tôi ném một ngoại lệ tham chiếu null.Lượt xem MVC3: Xử lý các mô hình null với finesse
@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
này ném một lỗi nếu Mẫu là rỗng.
Nhưng mọi người xử lý như thế nào? Tôi chắc chắn không nhìn thấy mẫu mã ở khắp mọi nơi với kiểm tra null xấu xí xả rác mã trong xem. Điều đó khiến tôi tin rằng hầu hết thời gian, các bộ điều khiển không được trả về các mô hình null. Nhưng làm thế nào bạn có thể thực thi điều này với sự khéo léo hơn?
Ngay bây giờ ngay khi ai đó vô tình khiến bộ điều khiển trả về mô hình không có giá trị, mô hình xem sẽ thổi lên và có vẻ như có lỗi. Trong thực tế, đó là lỗi của bộ điều khiển. Và quan điểm có thể thậm chí không "nắm bắt" vấn đề, nó sẽ chỉ làm như vậy nếu các thành viên của mô hình xảy ra để có được sử dụng (đó là hầu hết thời gian, tất nhiên).
Vì nhiều lý do khác nhau, một số chế độ xem có thể muốn xử lý các giá trị rỗng. Mặc dù vậy, tôi không cho rằng đây là trường hợp đa số. Rõ ràng đây là vấn đề đặt một số "hợp đồng" giữa chế độ xem và bộ điều khiển.
tôi không thích các tùy chọn Tôi đã nhìn thấy:
- Kiểm tra xem mô hình là null mỗi khi nó được sử dụng. Rất què!
- Một tuyên bố lớn nếu gói toàn bộ chế độ xem bằng mẫu rỗng kiểm tra. Hãy nghĩ đến mã bất động sản bị lãng phí. Què!
- Thêm nếu kiểm tra bằng một cú ném ở trên cùng. Không tệ, nhưng có vẻ ngớ ngẩn. Hơi xấu hổ.
Tôi rất thích biết nếu một cái gì đó giống như các tùy chọn này tồn tại để thiết lập "no null" hợp đồng:
- Một thuộc tính vào phương pháp điều khiển như [NoNullModels]. Tôi nghi ngờ điều này tồn tại, vì tôi không nghĩ rằng bộ điều khiển biết những gì xem nó là hooking lên đến.
- Trong giao diện, một chỉ báo như @ MVC3.HeyDontAllowNulls hoặc một số cách tiêu chuẩn khác của ném một ngoại lệ (như tùy chọn 3 nêu trên)
tại sao bạn thậm chí sẽ trả về một mô hình không? –
bạn đã thử '@ Html.DisplayFor (m => m.SomeText)' –
Về chủ đề mẫu mã, 99% mẫu mã trên Internet không có xử lý ngoại lệ và xác thực đầu vào. Một phần ra khỏi sự lười biếng và một phần vì nó sẽ gây nhầm lẫn cho điểm mà các mẫu mã được minh họa. –