母版(Layout)和用户控件(部分视图)在任何一个成熟的UI表现框架上是少不了的特性了,若是没有这两个特性,复制粘贴的工做就少不了了。 html
在了解到Nancy的时候,我一样是火烧眉毛的想看看是否支持个两个特性。 程序员
根据Nancy官方文档知道,Nancy支持几个模板引擎,其中就有Razor,这对ASP.NET MVC的程序员来讲是个福音,我确定是选择Razor的。 web
Nancy的Razor和MVC的Razor大部分语法是同样的,有些地方可能没Razor灵活和强大,毕竟VS IDE、ASP.NET MVC框架和C#语言都是人家自家的东西。 c#
要使用Nancy的Razor引擎,除了引用Nancy和Nancy.Hosting.Self包,还需添加Nancy.Viewengines.Razor,而Nancy.Viewengines.Razor依赖于Microsoft.AspNet.Razor,因此项目的packages.config看起来是这样的: app
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" /> <package id="Nancy" version="1.2.0" targetFramework="net45" /> <package id="Nancy.Hosting.Self" version="1.2.0" targetFramework="net45" /> <package id="Nancy.Viewengines.Razor" version="1.2.0" targetFramework="net45" /> </packages>
注:Nancy.Hosting.Self不是必须的,我用的自宿主,因此用这个,还能够宿主在ASP.NET,WCF等等。 框架
添加了Nancy.Viewengines.Razor后,项目会修改app.config,另外会添加一个web.config,里面有Razor的一些配置。 spa
先来看一些项目的文件结构,再简单说明部分文件里的内容: code
第一步,Views根目录的_ViewStart.cshtml,Nancy.Razor也是支持的,在这里能够指定默认的Layout xml
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> @{ Layout = "/Shared/_Layout.cshtml"; }第二步,_Layout也没什么特别的,那MVC里的差很少,不过有一点要注意,若是是最顶级母版,必须设置Layout=null;
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> @{ Layout = null;//这里必定要设置 } <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div style="border:2px solid #ffd800"> @RenderBody() </div> @Html.Partial("/Shared/Footer") @RenderSection("scripts",false) </body> </html>
这里有熟悉的@RenderBody,@RenderSection,@Html.Partial,都是可用的。 htm
第三步,home/index.cshtml和home/about.cshtml就能够使用_Layout.cshtml了,下面是about.cshtml
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<NancyAPI.Person> <h2>About Page</h2> <p>ID:@Model.ID</p> <p>ID:@Model.Name</p>对应的路由以下:
Get["/about"] = parameter => { Person p = new Person() { ID = 26, Name = "loogn" }; return View["home/about", p]; };