原文: Nancy之區域和分部視圖的使用
一、前言
在MVC中,區域(Area)和分部視圖(PartialView)應該是我們用的十分頻繁的兩個東西
今天我們就在Nancy中,把這兩個東西簡單的用起來!
二、簡單使用之區域
區域,無論是對開發過程還是代碼管理都占據着一個重要的地位!
下面我們就來看看Nancy中的區域要如何用,其實,準确來說,
Nancy中并沒有明确提出區域這個概念,也隻是我憑着與MVC的對照,自己添加的一個好了解的概念
下面就來看一下吧,這裡用到了Nancy,Nancy.Hosting.Aspnet這些引用
這裡是所有的視圖引擎通用的功能,是以就不添加特殊的視圖引擎(Razor、Spark等)
先來看看我們的項目架構

我們定義了三個HomeModule,分别在不同的位置,Admin、Other、根目錄
這樣就相當于有了Admin、Other、根目錄三個區域
具體的内容如下 :
Admin/HomeModule.cs
1 public class HomeModule : NancyModule
2 {
3 public HomeModule() : base("/admin")
4 {
5 Get["/"] = _ =>
6 {
7 return View["index"];
8 };
9 }
10 }
Other/HomeModule.cs
1 public class HomeModule : NancyModule
2 {
3 public HomeModule() : base("/other")
4 {
5 Get["/"] = _ => { return View["index"]; };
6 }
7 }
HomeModule.cs
1 public class HomeModule : NancyModule
2 {
3 public HomeModule()
4 {
5 Get["/"] = _ =>
6 {
7 return View["index"];
8 };
9 }
10 }
同樣的,我們也定義相應區域的視圖!
具體如下 :
Views/Admin/Home/index.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta charset="utf-8" />
6 </head>
7 <body>
8 Admin->Home->Index
9 </body>
10 </html>
Views/Other/Home/index.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta charset="utf-8" />
6 </head>
7 <body>
8 Other->Home->Index
9 </body>
10 </html>
Views/Home/index.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta charset="utf-8" />
6 </head>
7 <body>
8 Home -> Index
9 </body>
10 </html>
這樣就簡單的把不同的功能分在了不同的區域了,下面看看效果
是不是很簡單呢!其實跟我們正常的用法沒用多少差別!就是多了幾個檔案夾,便于管理。
我們也可以在Module中指定視圖的位置,但簡易還是區分開好一點,目的還是管理友善。
Nancy中視圖引擎的細節,可以幫助我們更清晰的了解視圖的加載等内容,由于這一塊已經有園友講述過了
在此我就不再重複了
.NET Nancy 詳解(三) Respone 和 ViewEngine三、簡單使用之分部視圖
分部視圖這一塊,我主要是講一下關于Razor(因為個人用的比較多)
用法很簡單
@Html.Partial(viewName,modelForPartial)
是不是跟MVC中的基本一緻呢?
我們現在定義兩個分部視圖,首部_PartialHeader.cshtml和尾部_PartialFooter.cshtml
1 <div>首部</div>
1 <div>尾部</div>
然後定義一個布局頁面_Layout.cshtml
1 @inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
2 <!DOCTYPE html>
3
4 <html>
5 <head>
6 <meta name="viewport" content="width=device-width" />
7 <title>@ViewBag.Title</title>
8 </head>
9 <body>
10 @Html.Partial("/Partials/_PartialHeader")
11 <div>
12 @RenderBody()
13 </div>
14 @Html.Partial("/Partials/_PartialFooter")
15 </body>
16 </html>
下面編寫Module傳回一個視圖index.cshtml
1 @{
2 Layout = "Views/_Layout.cshtml";
3 }
4
5 内容
運作結果
這個是靜态的分部頁面,下面我們綁定一下model,也就是在Partial帶兩個參數
編寫一個分部視圖_PartialTime.cshtml
1 <span>@Model</span>
在剛才的_Layout.cshtml中添加下面的代碼
1 @Html.Partial("/Partials/_PartialTime", Model)
同時修改HomeModule
1 Get["/"] = _ =>
2 {
3 var model = DateTime.Now.ToString();
4 return View["index2",model];
5 };
運作
OK了,正是我們所期待的
注:如果不在頁面添加@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
我們的智能提示是不會出現Partial的!!
Partial是通過HtmlHelper來實作的,不過Nancy中的HtmlHelper,可用的類型與MVC相比少了很多。
像 @Html.ActionLink()這些是沒有的。