Nancy之區域和分部視圖的使用
阿新 • • 發佈:2018-05-21
resp ctype lin 布局 area one html中 頁面 eight 原文:Nancy之區域和分部視圖的使用
我們定義了三個HomeModule,分別在不同的位置,Admin、Other、根目錄
這樣就相當於有了Admin、Other、根目錄三個區域
具體的內容如下 :
Admin/HomeModule.cs
一、前言
在MVC中,區域(Area)和分部視圖(PartialView)應該是我們用的十分頻繁的兩個東西 今天我們就在Nancy中,把這兩個東西簡單的用起來!二、簡單使用之區域
區域,無論是對開發過程還是代碼管理都占據著一個重要的地位! 下面我們就來看看Nancy中的區域要如何用,其實,準確來說, Nancy中並沒有明確提出區域這個概念,也只是我憑著與MVC的對照,自己添加的一個好理解的概念 下面就來看一下吧,這裏用到了Nancy,Nancy.Hosting.Aspnet這些引用 這裏是所有的視圖引擎通用的功能,所以就不添加特殊的視圖引擎(Razor、Spark等) 先來看看我們的項目框架1 public class HomeModule : NancyModule 2 { 3 public HomeModule() : base("/admin") 4 { 5 Get["/"] = _ => 6 { 7 returnOther/HomeModule.csView["index"]; 8 }; 9 } 10 }
1 public class HomeModule : NancyModule 2 { 3 public HomeModule() : base("/other") 4 { 5 Get["/"] = _ => { return View["index"]; }; 6 } 7 }HomeModule.cs
1public 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.cshtml1 <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()這些是沒有的。
Nancy之區域和分部視圖的使用