ASP.NET MVC有三大组件(即模型、视图、控制器)。所谓模型,就是MVC需要提供的数据源,负责数据的访问和维护。所谓视图,就是用于显示模型中数据的用户界面。所谓控制器,就是用来处理用户的输入,负责改变模型的状态并选择适当的视图来显示模型的数据。以下是我绘制的MVC三大组件之间的交互图。
从交互图中可以看出,MVC从用户发送请求到页面呈现结果大致经过了五个步骤,分别为:
(1). 用户在浏览器输入地址,向页面发送请求(实则是向控制器发出相关命令);
(2). 控制器接受命令后,向模型请求获得相关的数据;
(3). 模型将相应的数据返回给控制器;
(4). 控制器将相关数据发送到指定的视图;
(5). 指定的视图呈现相关的数据。
从界面中可以看出,Mcirosoft已经约定了一套规范的目录结构,主要功能如下:
Content:寻访CSS、图片等静态资源文件;
Controllers:存放一系列以***Controllers命名的控制器组件,执行与模型和视图的交互(一般业务会提取到业务逻辑层中);
Models:存放Linq To SQL或ADO.NET Data Entity Model等模型组件,也可存放有关的数据操作等(一般提取到数据访问层中),或者是视图层中需要使用的Model模型;
Scripts:存放系统需要的JavaScript文件;
Views:存放与Controllers在与方法对应的视图,注意:如果存在***Controllers控制器,在Views中就必然会映射一个***命名的文件夹。在Views之下的Shared则存放视图组件的公共部分,如.master、样式表等。
此外,Global.asax实现MVC的URL的路由控制,可以在其中的RegisterRoutes()中设置默认的路由,以下是Global.asax的具体路由代码。
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//自定义View
ViewEngines.Engines.Clear();
ExtendedRazorViewEngine engine = new ExtendedRazorViewEngine();
engine.AddPartialViewLocationFormat("~/Areas/Common/Views/Shared/{0}.cshtml");
ViewEngines.Engines.Add(engine);
//设置MEF依赖注入容器
MefConfig.RegisterMef();
//Model去除前后空格
ModelBinders.Binders.DefaultBinder = new TrimModelBinder();
}
}
当MVC在.net framework3.5中运行时,还需要在web.config中的httpModules配置节中注册UrlRoutingModule类,用于解析URL路由,这正是MVC与传统的ASP.NET应用程序的根本区别。
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
原文:http://www.cnblogs.com/hmiinyu/archive/2012/05/25/2517730.html