Tôi đang cố gắng tạo menu động (được lưu trữ trong DB), được hiển thị trên tất cả các trang ứng dụng web. Sử dụng Google Tôi thấy rằng tốt hơn là thực hiện chế độ xem menu như một phần của Chế độ xem chính (_Layout.cshtml). Và do đó, mọi phương thức hành động của bộ điều khiển phải chứa dữ liệu với mô hình menu. Để tránh trùng lặp mã tôi tìm thấy giải pháp để tạo ra một bộ điều khiển cơ sở và cung cấp dữ liệu sử dụng constructor của nó:Phương pháp async MVC trong bộ điều khiển bộ tạo
Ngoài ra, tôi đang cố gắng để sử dụng async/chờ đợi khả năng và PageService của tôi (menu) đang sử dụng ToListAsync() để lấy dữ liệu từ DB. Vì vậy, bây giờ tôi có một vấn đề, đó BaseController constructor có một phương pháp async:
public class BaseController : AsyncController, IBaseController
{
private readonly IPageService _pageService;
public BaseController(IPageService pageService)
{
_pageService = pageService;
SetBaseViewModelAsync();
}
private async Task SetBaseViewModelAsync()
{
ViewData["Pages"] = await _pageService.GetAllAsync();
}
}
tôi biết rằng đây là BAD MÃ, nhưng tôi không biết làm thế nào để thiết kế tình huống này đúng cách. Có thể có cách nào khác tốt hơn để tạo menu động hoặc cách khác để lấy dữ liệu không đồng bộ?
Ngoài ra, tôi tìm thấy bài viết này, nhưng tôi không biết nếu tôi có thể áp dụng các giải pháp của nó bởi vì tôi không biết nếu tôi có thể xử lý tạo điều khiển dụ:
http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html
Thiết kế tồi, bạn chính xác ở đó. Bạn nên xem xét một thiết bị trung gian hoặc bộ lọc hành động thay vì –
Cảm ơn bạn đã trả lời! Bạn có thể vui lòng cung cấp một số liên kết đến các bài viết có thiết kế phù hợp không? Bởi vì tôi đã googled trong khoảng 1-2 giờ để tìm cách triển khai thực đơn động. –
Điều này nghe có vẻ giống như một ứng cử viên tốt cho một [Hành động trẻ em] (https://stackoverflow.com/questions/12530016/what-is-an-mvc-child-action). Xem thêm câu hỏi https: // stackoverflow này.com/questions/21948909/asp-net-mvc-controller-for-layout – Jasen