C#学习教程:在asp.net-mvc中,使用BaseViewModel在Site.Masterpage上显示动态内容的最佳方式是什么显示动态内容的最佳方式我有一个asp.net-mvc网站,我想在每个页面上显示一些信息。我创建了一个名为BaseViewModel的类,每个viewModel类都继承自BaseViewModel。Site.Master视图直接绑定到BaseViewModel。现在,基类有一个名为MenuLinks的属性。menulinks属性是从数据库调用中填充的,因此在每个控制器操作中,我添加了一个新行:ViewModel:viewModel.MenuLinks=_repository.GetMenuLinks();我有很多控制器、动作和视图模型。有没有一种更简洁的方法可以执行上述操作,而不必将此行放在每个控制器操作的顶部。您可以编写一个将在每个操作之后执行的自定义操作过滤器属性,并设置基本模型的属性:varviewResult=filterContext.ResultasViewResultBase;if(viewResult!=null){varmodel=viewResult.ViewData.ModelasBaseViewModel;如果(模型!=null){model.MenuLinks=_repository.GetMenuLinks();现在剩下的就是使用这个动作过滤器来装饰你的基本控制器。另一种处理方法是使用子操作而不是基本视图模型。在您的site.master页面中,如果需要,可以在您的家庭控制器中调用一个操作,并让它返回html的部分视图,在您的情况下是一些菜单链接。publicclassHomeController:Controller{publicViewResultMenu(){varviewModel=newViewModel();viewModel.MenuLinks=_repository.GetMenuLinks();返回PartialView("MenuPartial",viewModel);你可以创建一个部分“MenuPartial.ascx”我喜欢贾斯汀的例子,因为它使用了MVC方法。我对其进行了修改,使其适用于带剃须刀的MVC3。这是我在_Layout.cshtml中的内容:@Html.Action("Menu","Layout")(){varviewModel=newMenuViewModel{IsAdministrator=true};返回PartialView(viewModel);}}呈现部分视图名称Menu.cshtml@modelMenuViewModel@if(Model.IsAdministrator){//呈现管理内容}//呈现其他项目我认为在不修改所有控制器操作的情况下实现结果的最佳方法是创建一个使用菜单链接填充BaseModel属性的自定义操作过滤器。然后您可以拥有一个BaseController类并将该属性添加到BaseController。创建一个为您提供已配置视图模型的工厂类。类工厂{Repository_repository;公共工厂(存储库存储库){_repository=repository;}publicViewModelGetViewModel(){varviewModel=newViewModel();viewModel.MenuLinks=_repository.GetMenuLinks();返回视图模型;然后在你的控制器中,你可以使用Factory类而不是直接创建viewModel的实例。以上是C#学习教程:WhatisthebestwaytodisplaythedynamiccontentontheSite。分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——...yourcontroller...varfactory=newFactory(_repository);varviewMolde=factory.GetViewModel();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
