Nancy(二)Razor引擎的Layout和部分视图

    母版(Layout)和用户控件(部分视图)在任何一个成熟的UI表现框架上是少不了的特性了,如果没有这两个特性,复制粘贴的工作就少不了了。

    在了解到Nancy的时候,我同样是迫不及待的想看看是否支持个两个特性。

    根据Nancy官方文档知道,Nancy支持几个模板引擎,其中就有Razor,这对ASP.NET MVC的程序员来说是个福音,我肯定是选择Razor的。

Nancy的Razor和MVC的Razor大部分语法是一样的,有些地方可能没Razor灵活和强大,毕竟VS IDE、ASP.NET MVC框架和C#语言都是人家自家的东西。

    要使用Nancy的Razor引擎,除了引用Nancy和Nancy.Hosting.Self包,还需添加Nancy.Viewengines.Razor,而Nancy.Viewengines.Razor依赖于Microsoft.AspNet.Razor,所以项目的packages.config看起来是这样的:


<?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的一些配置。

先来看一些项目的文件结构,再简单说明部分文件里的内容:

Nancy(二)Razor引擎的Layout和部分视图

第一步,Views根目录的_ViewStart.cshtml,Nancy.Razor也是支持的,在这里可以指定默认的Layout


@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,都是可用的。

第三步,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];
    };




你可能感兴趣的:(Razor,Nancy)