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?
Trả lời
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.
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
Đ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ó? –
@MaksimVi .: Sau đó, bạn nên sử dụng một hành động con thay thế. – SLaks
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.
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.
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.
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.
@{
try
{
<td>
@((TradeType)Enum.Parse(typeof(TradeType), item.AppCode)).GetDescription();
</td>
}
catch
{
<td>@item.AppCode
</td>
}
}
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
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. –
- 1. Hãy thử, bắt vấn đề
- 2. Hãy thử/bắt trong Java
- 3. Hãy nhớ tôi Cookie thực hành tốt nhất?
- 4. Hãy thử không bắt ngoại lệ trong chức năng DllImport
- 5. Hãy thử Bắt mã thông báo không mong muốn
- 6. Thực hành tốt nhất: Tổ chức thử nghiệm đơn vị
- 7. Nếu bắt ngoại lệ con trỏ null không phải là một thực hành tốt, là bắt ngoại lệ tốt nhất?
- 8. Thực hành tốt nhất trong đánh bắt và ném nullpointerexception?
- 9. Hãy thử-catch-cuối cùng và sau đó một lần nữa cố gắng nắm bắt
- 10. Thử/Bắt trong Constructor - Khuyến cáo thực hành?
- 11. Java Hãy thử và bắt IOException Vấn đề
- 12. Thực hành đặt tên thử nghiệm tốt nhất là
- 13. Hãy thử bắt cuối cùng: Làm điều gì đó nếu không có ngoại lệ được ném
- 14. Hãy thử/Catch và luồng
- 15. Thực hành tốt nhất để bắt đầu ứng dụng xoay
- 16. ngoại lệ bắt thực hành tốt nhất (. C#/net)
- 17. Ví dụ là một thực hành tốt?
- 18. $ _COOKIE ['cookiefoo'], hãy thử lấy cookie
- 19. Thực hành tốt nhất của Haskell QuickCheck (đặc biệt là khi thử nghiệm loại lớp học)
- 20. Hãy thử Dequeue trong ConcurrentQueue
- 21. IEnumerable & Thực hành tốt (& WCF)
- 22. ViewHolder - thực hành tốt
- 23. Sử dụng các đối tượng giả ngoài thử nghiệm, thực hành không tốt?
- 24. một ví dụ tốt về thực hành tốt nhất ant
- 25. Thử nghiệm tự động với Ruby on Rails - thực hành tốt nhất
- 26. Ngoại lệ Java không bị bắt gặp
- 27. Thực hành tốt của Makefile
- 28. Bắt đầu thực hành Python?
- 29. Hãy thử so sánh các ký tự trong C#
- 30. Thực hành tốt về REPLACE INTO có tốt không?
Điều gì trên trái đất? – SLaks
@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? –