asp.net mvc webform和razor的page基类区别
2017-08-15 11:54
441 查看
protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance) { if (writer == null) { throw new ArgumentNullException("writer"); } WebViewPage webViewPage = instance as WebViewPage; if (webViewPage == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentCulture, MvcResources.CshtmlView_WrongViewBase, ViewPath)); } // An overriden master layout might have been specified when the ViewActionResult got returned. // We need to hold on to it so that we can set it on the inner page once it has executed. webViewPage.OverridenLayoutPath = LayoutPath; webViewPage.VirtualPath = ViewPath; webViewPage.ViewContext = viewContext; webViewPage.ViewData = viewContext.ViewData; webViewPage.InitHelpers(); if (VirtualPathFactory != null) { webViewPage.VirtualPathFactory = VirtualPathFactory; } if (DisplayModeProvider != null) { webViewPage.DisplayModeProvider = DisplayModeProvider; } WebPageRenderingBase startPage = null; if (RunViewStartPages) { startPage = StartPageLookup(webViewPage, RazorViewEngine.ViewStartFileName, ViewStartFileExtensions); } webViewPage.ExecutePageHierarchy(new WebPageContext(context: viewContext.HttpContext, page: null, model: null), writer, startPage); }
View Code
正如我们猜想的在RenderView方法中只看到一个WebViewPage的类,那么就说明Razor引擎的View和PartialView的基类进行了合并,其实我们可以通过扩展名也可以得知,因为razor的扩展名不管是view和partialview都是.cshtml,和之前webform的模式已经不同。
既然razor进行了合并,那么他们的头部声明肯定都是一样的,所以微软就省去了这个环节。
那么razor该如何重写基类呢,如果声明页面头部继承关系呢?
同样我们继承于WebViewPage基类,然后在自己的view或者partialview的头部进行如下声明:
@inherits CustomWebViewPage
或者
@inherits CustomWebViewPage<CustomModel>
这样就可以实现同的自定义实现了,不过这里需要提一点,由于WebViewPage是一个abstract类型的类,所以不能直接实例化,那么一点继承的话,里面必须需要实现一个Excute方法。如果你声明的CustomWebViewPage也是一个abstract类型,则不需要重写,调用默认的实现就可以,但是如果不是则要自己去实现自定义的excute方法。
相关文章推荐
- 解析ASP.NET WebForm和Mvc开发的区别 分类: ASP.NET 2013-12-29 01:59 11738人阅读 评论(5) 收藏
- ASP.NET MVC 3 Razor Syntax - RenderBody, RenderPage and RenderSection
- asp.net MVC 和 webForm的区别
- ASP.NET MVC与WebForm区别有哪些
- 解析ASP.NET WebForm和Mvc开发的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- ASP.NET MVC 与 WebForm 区别(推荐)
- 解析ASP.NET WebForm和Mvc开发的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- ASP.NET MVC:在WebForm中使用MVC4.0,并完美结合Razor引擎
- 解析ASP.NET WebForm和Mvc开发的区别
- ASP.NET WebForm和Mvc的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- 【.NET】WebForm与Asp.NET MVC区别学习
- 解析ASP.NET WebForm和Mvc开发的区别
- ASP.NET MVC与WebForm的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- ASP.NET MVC 与 WebForm 三层架构 区别
- ASP.NET MVC 中使用 IView.Render 来呈现 WebFormView 、RazorView 中的内容
- 解析ASP.NET WebForm和Mvc开发的区别