leo*_*ora 2 c# asp.net-mvc viewmodel
我有一个asp.net-mvc网站,我想在每个页面上显示一些信息.我创建了一个名为BaseViewModel的类,每个viewModel类都继承自BaseViewModel.Site.Master视图直接绑定到BaseViewModel.
现在,基类有一个名为MenuLinks的属性.
menulinks属性从数据库调用填充,因此在每个控制器操作上,我正在添加一个新行:ViewModel:
viewModel.MenuLinks = _repository.GetMenuLinks();
Run Code Online (Sandbox Code Playgroud)
我有很多控制器,动作和视图模型.有没有更清洁的方法,我可以做到上述,而不必将这一行放在每一个控制器动作上面.
Dar*_*rov 11
您可以编写自定义操作过滤器属性,该属性将在每个操作之后执行并设置基本模型的属性:
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var viewResult = filterContext.Result as ViewResultBase;
if (viewResult != null)
{
var model = viewResult.ViewData.Model as BaseViewModel;
if (model != null)
{
model.MenuLinks = _repository.GetMenuLinks();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在剩下的就是用这个动作过滤器来装饰你的基本控制器.
处理此问题的另一种方法是使用子操作而不是基本视图模型.
| 归档时间: |
|
| 查看次数: |
3452 次 |
| 最近记录: |