2012-03-23 28 views
6

Trong ứng dụng MVC3, có được coi là thực hành không tốt để sử dụng khối try catch bên trong khối dao cạo @{ } trong chế độ xem .cshtml không?Hãy thử bắt gặp một cách thực hành không tốt?

+0

Điều gì trên trái đất? – SLaks

+0

@SLaks - Như bạn đã nói, không có lý do chính đáng nào cho điều này và sẽ có logic ở sai chỗ - tôi chưa thực hiện nó nhưng chỉ muốn một chút qua lại. Lý do là tôi nhận ra rằng tôi đã có một ngoại lệ trong quan điểm từ việc kết hợp một đối tượng có một người nước ngoài hợp lệ tại một thời điểm, nhưng đối tượng nước ngoài đó đã bị loại bỏ khỏi cơ sở dữ liệu. Đây là một ví dụ về một liên kết: 'phase.Container = containers.Where (cont => cont.ContainerId == phase.ContainerId) .SingleOrDefault();'. Tôi sẽ phải xử lý các trường hợp ngoại lệ ở đây. Nên tất cả linq được bao quanh với thử bắt? –

Trả lời

12

Rất nhiều.

Chế độ xem không được chứa bất kỳ logic thực nào; bất cứ điều gì có thể ném một ngoại lệ thuộc về bộ điều khiển.

+19

Báo cáo về chăn như thế này không bao giờ chính xác. Bạn đang nói rằng đó là hình thức xấu để đặt bất kỳ mã trong một cái nhìn? Vậy tại sao Razor tồn tại? Và nếu bạn có mã trong một khung nhìn, chắc chắn có thể có trường hợp ngoại lệ (chẳng hạn như không có sẵn một tệp bên ngoài) cần phải được xử lý. – Gullbyrd

+1

Điều gì sẽ xảy ra nếu đó là chế độ xem được chia sẻ một phần và không có bộ điều khiển cho nó? –

+0

@MaksimVi .: Sau đó, bạn nên sử dụng một hành động con thay thế. – SLaks

1

Tôi sẽ nói như vậy. Tuyến đường tối ưu sẽ có Mô hình được chuyển đến Chế độ xem được xác thực bởi bộ điều khiển trước khi nó đạt đến chế độ xem.

2

Việc sử dụng của bạn phụ thuộc vào các chi tiết cụ thể trong đơn đăng ký của bạn, tuy nhiên bạn nên cố gắng giữ cho chế độ xem của mình càng trống càng tốt. Giá trị hợp lý của mã sẽ được xác minh trong bộ điều khiển và không bao giờ được chuyển đến khung nhìn.

2

Không đặt mã như vậy trong Chế độ xem. Lượt xem sẽ chỉ dành cho đánh dấu hiển thị của bạn càng nhiều càng tốt. Bạn có thể đặt câu lệnh đó vào phương thức hành động của bộ điều khiển để cung cấp dữ liệu cho một khung nhìn.

public ActionResult GetUser(int id) 
{ 

    try 
    { 
    //Get the ViewModel and return the correct View. 
    } 
    catch(Exception ex) 
    { 
    //log the error 
    return View("YourErrorView"); 
    } 

} 

Hãy nhớ rằng một trong những điều mà MVC nhấn mạnh là tách mối quan tâm. Lượt xem phải rõ ràng và có thể đọc được Đánh dấu.

0

Nó không phải là một điều tốt để làm. Khung MVC được thiết kế để tách riêng khung nhìn với logic. Vì vậy, giữ logic nơi nó phải được, trong bộ điều khiển.

1
@{ 
try 
{ 
    <td> 
     @((TradeType)Enum.Parse(typeof(TradeType), item.AppCode)).GetDescription(); 
    </td> 
} 
catch 
{ 
    <td>@item.AppCode 
    </td> 
} 
} 
+3

Không thực sự là một câu trả lời cho câu hỏi: Câu hỏi đặt ra là nếu nó là thực hành tốt, không phải cách nó được thực hiện. – Stephen

+0

Trong khi điều này có thể trả lời câu hỏi, bạn không để lại bất kỳ lời giải thích nào về lý do tại sao tính năng này hoạt động. Câu trả lời này không thêm nhiều giá trị cho khách truy cập sau này có thể có cùng một vấn đề. Vui lòng mở rộng câu trả lời của bạn để bao gồm một số giải thích. –

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