(一)MVC1版本的ViewEngine
从上图,我们可以知道:(1)当客户端发送请求时,DefaultControllerFactory根据RequestContext对象 和ControllerName来生成我们的Controller。Controller的ViewDataDictionary将保存相关的数据,并且通过 ViewEngine传递给View。
public virtual IController CreateController(RequestContext requestContext, string controllerName) { Type controllerType = this.GetControllerType(requestContext, controllerName); //type = this.GetControllerTypeWithinNamespaces(requestContext.RouteData.Route, controllerName, namespaces); return this.GetControllerInstance(requestContext, controllerType); } protected internal virtual IController GetControllerInstance(RequestContext requestContext, Type controllerType) { return (IController) Activator.CreateInstance(controllerType);//反射 }
(2)在我们以前的MVC版本中,Controller拥有ViewEngine的属性。我们先看下下述的代码: ViewEngine依据ViewContext,ViewLocator怎么处理View以及响应客户端??
public void RenderView(ViewContext viewContext) { string viewLocation = ViewLocator.GetViewLocation(viewContext, viewContext.ViewName);//根据ViewContext以及相关内容获取view的相对文件路径 string viewPath = viewContext.HttpContext.Request.MapPath(viewLocation););//获取view 的绝对文件路径 string viewTemplate = File.ReadAllText(viewPath);//读取文件内容 IRenderer renderer = new PrintRenderer(); viewTemplate = renderer.Render(viewTemplate, viewContext);//正则表达式处理相应内容, 难点! viewContext.HttpContext.Response.Write(viewTemplate);//发送响应到客户端 }
从上面的代码中,我们能够清晰的看到,总体框架就是这么赤裸裸的“请求--->响应 ”。虽然代码是过去版本的,但是依旧能够使我们比较容易的理解整个过程的细节。
关于以前版本的 自定义ViewEngine请参考http://blog.maartenballiauw.be/post/2008/05/Creating-a-custom-ViewEngine- for-the-ASPNET-MVC-framework.aspx
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索版本
,以便于您获取更多的相关知识。
时间: 2024-09-27 00:30:50