2011-09-23 35 views
5

Bộ điều khiển của tôi trả về một danh sách các mục theo quan điểm của tôi. Tôi cần xử lý trường hợp khi không có mục nào để hiển thị thông báo, "Không có mục nào".Cách MVC phù hợp để hiển thị thông báo "không có mục" trong chế độ xem

Tôi có thể:

  1. Kiểm tra list.Count từ bộ điều khiển của tôi và gửi lại một cái nhìn chỉ chứa thông điệp rằng, hoặc
  2. Kiểm tra list.Count từ quan điểm riêng của mình, và hiển thị các tin nhắn hoặc các mục cho phù hợp.

Tôi đọc rằng chế độ xem không nên có bất kỳ logic nào, do đó, cách MVC thuần túy sẽ là # 1 ở trên. Tôi có sai, hoặc được chấp nhận trong MVC? Cảm ơn nhiều.

Trả lời

14

Đó là trách nhiệm của một lượt xem. Kiểm tra tổng số trên mô hình và hành động phù hợp:

@model IEnumerable<MyViewModel> 

@if (Model.Count() > 0) 
{ 
    ... 
} 
else 
{ 
    <div>Nothing to display here</div> 
} 

Và nếu bạn đã sử dụng một số helper Lưới ví dụ như MVCContrib Grid bạn thậm chí không cần một if trong giao diện:

@model IEnumerable<MyViewModel> 
@Html.Grid(Model) 
    .Empty("Nothing to display here") 
    .Columns(column => 
    { 
     ... 
    }) 
) 
3

Một số có thể không đồng ý, nhưng tôi nghĩ không thực tế khi xóa tất cả logic khỏi chế độ xem. Đó là ... miễn là chúng ta đang nói về logic xem.

Nếu bạn đặt tin nhắn, bạn vẫn phải thực hiện một số logic để hiển thị tin nhắn đó hay không, đặc biệt nếu bạn muốn từ bỏ bất kỳ tiêu đề nào cho một đầu ra trống, nếu không bạn sẽ đặt.

Tôi sẽ đề nghị điều quan trọng nhất là phải nhất quán trong cách bạn thực hiện ... nhưng thực hiện điều đó có ý nghĩa với bạn. Chỉ cần cố gắng giữ cho logic được giới hạn ở mức cần thiết để hiển thị dữ liệu của bạn.

+2

Tôi đồng ý, phát hiện những thứ như đếm để hiển thị "Không có kết quả" sẽ ổn nhưng vẫn giữ cho phù hợp. Ý tôi là, tại sao chúng ta thậm chí có Razor nếu chúng ta không thể sử dụng nó ở bất cứ đâu :)? – Jack

1

Chế độ xem có thể chứa logic chế độ xem nhưng không có logic nghiệp vụ. Vì vậy, lựa chọn của bạn # 2 sau đó nên được ok.

1

Vâng, bạn đúng rồi. xem của bạn không nên có bất kỳ logic nhưng điều khiển của bạn can.Howerver kiểm tra điều kiện đơn giản và looping là hoàn toàn tốt đẹp. Cá nhân tôi sẽ kiểm tra đếm ở cấp độ bộ điều khiển và sau đó đặt kết quả trong viewbag hoặc một cái gì đó. Sau đó, tôi sẽ kiểm tra xem túi trong xem.

+0

Nhưng sau đó bạn vẫn có logic trong quan điểm của bạn :) – Jack

+0

'Kiểm tra tình trạng và vòng lặp' là logic. –

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