我刚刚转到使用ASP.NET MVC 2.在Web表单中,我通常有一个从System.Web.UI.Page扩展的BasePage类。然后每个页面都从这个BasePage扩展。在这个BasePage类中,我有我需要的方法。我如何在MVC应用程序中执行此操作?
任何样品都会受到赞赏。
感谢。
答案 0 :(得分:3)
MVC有点不同。等价物将是BaseController,尽管这与经典ASP.NET意义上的页面并不完全相关。一开始,控制者没有任何标记。
在基本控制器中,您可以注入所有页面所需的任何模型类以及必须作为所有Action请求的一部分执行的任何常见行为。一个示例可能是一些自定义检查进入Controller OnActionExecuting事件...
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting.aspx
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//check the filterContext for a certain condition
if (condition) {
//do something else - redirect to a different route or
//render a different view to to the default
filterContext.Result = new RedirectResult(newUrl);
}
//Otherwise, do nothing, the requested Action will execute as normal...
}
答案 1 :(得分:2)
在MVC中,渲染UI的关注点更加分离,因此根据代码在基页中的作用将决定它在MVC中的位置。
如果您的代码生成HTML,则可能会创建自定义HTML帮助程序和可重用的局部视图(.ascx)。如果它处理输入数据的次数超过模型绑定器类中的输入数据,则可以为公共代码创建基本模型绑定器。如果它与您的服务和域模型进行了对话,那么它将在控制器中进行,并且您可以再次使用基本控制器。对持久层的查询将在您的模型中进行,并且在此重用代码会导致对您的体系结构的更大讨论。
答案 2 :(得分:1)
我们还从ASP.NET中的基页类转移,发现基本控制器和基础模型(ViewData)类的组合运行良好。
ex page属性例如:CurrentUser可从基本Controller获得,并在启动时传递给基础ViewData,因此您可以在aspx页面上使用它们。