|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我觉得这个学习方法很重要。初学者应该跟我一样有同样一个毛病。那就是急于求成。很想就自己做出个小小的系统来。可真要动手,却又茫然而不知所措。为什么会这样呢?因为我们没有耐心去学习基础知识。写根本看不到什么效果的测试代码。假如我们必要静态的用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的跨平台也当之无愧是一句谎言。 |
|