ASP.NET网站制作之ASP.NET MVC 在把持器中猎取某个视图动...
我觉得这个学习方法很重要。初学者应该跟我一样有同样一个毛病。那就是急于求成。很想就自己做出个小小的系统来。可真要动手,却又茫然而不知所措。为什么会这样呢?因为我们没有耐心去学习基础知识。写根本看不到什么效果的测试代码。假如我们必要静态的用AJAX从服务器端猎取HTML代码,拼接字符串是一种欠好的体例,以是我们将HTML代码写在cshtml文件中,然后经由过程代码传进model,静态猎取cshtml中的HTML代码固然,我们想要利用通用的办法往猎取cshtml,就必需重写RazorViewEngine视图引擎,设置视图搜刮地位
在查找一个视图时,Razor视图引擎遵守了MVC框架初期版本创建起来的商定。比方,假如你哀求与Home把持器相干的Index视图,Razor会检察如许的视图列表:
~/Views/Home/Index.cshtml
●~/Views/Home/Index.vbhtml
●~/Views/Shared/Index.cshtml
●~/Views/Shared/Index.vbhtml
正如你如今晓得的,Razor实践上不会在磁盘上查找这些视图文件,由于它们还没有被编译成C#类。Razor查找的是暗示这些视图的编译类。.cshtml文件是含有C#语句的模板(我们正在利用的这类),而.vbhtml文件含有VisualBasic语句。
你能够经由过程天生一个RazorViewEngine子类,来改动Razor搜刮的这类视图文件。这个类是Razor的IViewEngine完成。它创建于一组基类之上,这些类界说一组用来断定搜刮哪一种视图文件的属性。这些属性如表所形貌。
Property
属性Description
形貌DefaultValue
默许值ViewLocationFormats
MasterLocationFormats
PartialViewLocationFormatsThelocationstolookforviews,partialviews,andlayouts
查找视图、分部视图、和结构的地位"~/Views/{1}/{0}.cshtml",
"~/Views/{1}/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared/{0}.vbhtml"AreaViewLocationFormats
AreaMasterLocationFormats
AreaPartialViewLocationFormatsThelocationstolookforviews,partialviews,andlayoutsforanarea
查找一个地区的视图、分部视图、及结构的地位"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/{1}/{0}.vbhtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.vbhtml"这些属性先于Razor的引进,这是每组三个属性具有不异值的缘故原由。每一个属性是一个字符串数组,它们是用复合字符串格局化标记来暗示的。以下是与占位符对应的参数值:
●{0}representsthenameoftheview.
{0}暗示视图名
●{1}representsthenameofthecontroller.
{1}暗示把持器名
●{2}representsthenameofthearea.
{2}暗示地区名
为了修正搜刮地位,你要天生一个派生于RazorViewEngine的新类,并修正表所形貌的一个或多个属性值。
在Infrastructure文件夹中新建一个CustomRazorViewEngine类
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;namespaceMvcApplication1.Infrastructure{publicclassCustomRazorViewEngine:RazorViewEngine{publicCustomRazorViewEngine(){ViewLocationFormats=newstring[]{"~/Views/{1}/{0}.cshtml","~/Views/Shared/{0}.cshtml","~/Views/Shared_PartialView/{0}.cshtml"//指定查找某个文件的路径};PartialViewLocationFormats=newstring[]{"~/Views/{1}/{0}.cshtml","~/Views/Shared/{0}.cshtml","~/Views/Shared_PartialView/{0}.cshtml"////指定查找某个文件的路径};}}}我们在Global.asax的Application_Start办法中,用ViewEngines.Engines汇合来注册我们的这个派生视图引擎,像如许:
protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();ViewEngines.Engines.Clear();ViewEngines.Engines.Add(newCustomRazorViewEngine());WebApiConfig.Register(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}猎取html字符串的办法和怎样挪用
publicclassHomeController:Controller{////GET:/Home/publicActionResultIndex(){stringhtml=this.ControllerContext.RenderViewToString("_CommonPartial",newUserViewModel(){UserName="haha"});returnView(newUserViewModel(){IsEnable=false,UserCode="aa"});}}publicstaticclassHelperExtensions{publicstaticstringRenderViewToString(thisControllerContextcontext,stringviewName,objectmodel){if(string.IsNullOrEmpty(viewName))viewName=context.RouteData.GetRequiredString("action");context.Controller.ViewData.Model=model;using(varsw=newStringWriter()){ViewEngineResultviewResult=ViewEngines.Engines.FindPartialView(context,viewName);varviewContext=newViewContext(context,viewResult.View,context.Controller.ViewData,context.Controller.TempData,sw);try{viewResult.View.Render(viewContext,sw);}catch(Exceptionex){throw;}returnsw.GetStringBuilder().ToString();}}}我见过java运行在手机上,包括很廉价的山寨手机,但是却暂时没发现.net在手机上有什么作为。wp7可能是个转机,但是按照《Java的跨平台就是一句谎言。那.net的跨平台也当之无愧是一句谎言。 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
页:
[1]