我正在尝试制作动态菜单(存储在数据库中),该菜单显示在所有Web应用程序页面上。
使用Google,我发现将菜单视图制作为主视图(_Layout.cshtml)的一部分更好。因此,控制器的每个操作方法都必须包含带有菜单模型的数据。为了避免代码重复,我找到了创建基本控制器并使用其构造函数提供数据的解决方案:
此外,我正在尝试使用async/await的功能,我的PageService(菜单)正在使用ToListAsync()从数据库获取数据。所以现在我有一个问题,BaseController构造函数有一个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();
}
}
我知道这是 糟糕的代码,但我不知道如何正确地设计这种情况。也许有另一种更好的方法来创建动态菜单或以异步方式获取数据?
此外,我发现了这篇文章,但我不知道是否可以应用其解决方案,因为我不知道是否可以处理控制器实例的创建:
http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html