asp.net-mvc – 如何使用ASP.NET MVC中的基本控制器创建一个强类
发布时间:2020-12-15 18:31:42 所属栏目:asp.Net 来源:网络整理
导读:按照 NerdDinners的例子,我有兴趣创建一个强类型的主页。为了实现这一点,我使用一个基本控制器来检索主页面的数据。所有其他控制器继承此类。类似地,我有主页面和任何其他视图的ViewModels。 ViewModel类的视图继承自主页面的ViewModel。 题 子控制器应如
按照
NerdDinners的例子,我有兴趣创建一个强类型的主页。为了实现这一点,我使用一个基本控制器来检索主页面的数据。所有其他控制器继承此类。类似地,我有主页面和任何其他视图的ViewModels。 ViewModel类的视图继承自主页面的ViewModel。
题 子控制器应如何确保将母版页的数据传递给视图,而不设置与主页本身相关的ViewModel的属性? 我的主页面将显示一些按钮,这些按钮是在XML文件中确定的,因此我正在填充的Buttons类。 MasterPage ViewModel代码段 using System.Collections.Generic; namespace Site1.Models { public class MasterViewModel { public List<Button> Buttons{set; get;} } } 查看ViewModel namespace Site1.Models { public class View1ViewModel : MasterViewModel { public SomeDataClass SomeData { get; set; } } } 基控制器 using System.Collections.Generic; using System.Web.Mvc; using Site1.Models; namespace Site1.Controllers { public abstract class BaseController : Controller { protected MasterViewModel model = new MasterViewModel(); public BaseController() { model.Buttons = new List<Button>(); //populate the button classes (doesn't matter how) PopulateButtons(model.Buttons); } } } 视图的控制器: using System.Web.Mvc; namespace Site1.Controllers { public class View1Controller : BaseController { public ActionResult Index() { Models.View1ViewModel viewModel = new Models.View1ViewModel(); SomeDataClass viewData = new SomeDataClass() //populate data class (doesn't matter how) PopulateDataClass(viewData); viewModel.SomeData = viewData; //I WANT TO ELIMINATE THE FOLLOWING LINE! viewModel.Buttons = model.Buttons; return View("Index",viewModel); } } } 母版页继承了System.Web.Mvc.ViewMasterPage< Site1.Models.MasterViewModel> ;. 视图继承了System.Web.Mvc.ViewMasterPage< Site1.Models.View1ViewModel> ;. 解决方法
您可以创建一个动作后执行的过滤器,该过滤器查找该类型的模型,并相应地设置属性,也许通过调用基本控制器功能。然后,您将过滤器放在基类上,所有操作将自动查看。
动作过滤器属性获取控制器的ViewModel,并将其传递给控制器??的SetModel函数: using System.Web.Mvc; using Site1.Controllers; namespace Site1.Models { public class MasterAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext); MasterViewModel viewModel = (MasterViewModel)((ViewResultBase)filterContext.Result).ViewData.Model; BaseController controller = (BaseController)filterContext.Controller; controller.SetModel(viewModel); } } } 此功能添加到BaseController中: public void SetModel(MasterViewModel childViewModel) { childViewModel.Buttons = model.Buttons; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何在.net中读取Elastic Beanstalk环境属性?
- asp.net – 自动完成扩展程序 – 滚动条导致结果关闭?
- asp.net-mvc – 使用web api和asp.net mvc 5进行单点登录
- asp.net – 使用WebAPI时重新验证模型(TryValidateModel等效
- .net – 为什么ValidateAntiForgeryTokenAttribute允许匿名
- 为什么在ASP.NET中刷新页面时会执行按钮单击事件?
- asp.net – 为什么我在StateServer模式下运行时会丢失会话?
- asp.net-mvc – 在MVC中处理重复表单的最佳方法是什么?
- asp.net – HTML敏捷包删除break标签关闭
- asp.net-mvc – 在部署MVC 2 Web应用程序时要绝对检查的事项
推荐文章
站长推荐
- asp.net – 如何使用嵌套的视图模型获取EditorFo
- asp.net-mvc-2 – 抛出间歇性错误,“所需的防伪令
- asp.net-mvc – 为什么DisplayFor不向Action方法
- ASP.NET 2.5前缀ctl00和ASP.NET 4不是前缀ctl00
- asp.net mvc更新多条记录
- 如何将ASP.NET下拉列表DataTextField属性绑定到嵌
- asp.net-core – asp.net核心依赖注入问题 – Ad
- .Net Core微服务入门全纪录(五)——Ocelot-API
- asp.net-mvc-4 – ASP.NET MVC 4移动功能
- asp.net-mvc – 具有Repository,Service Layer和
热点阅读