Nancy(二)Razor引擎的Layout和部分視圖

    母版(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];
    };
相關文章
相關標籤/搜索