一、前言
在MVC中,区域(Area)和分部视图(PartialView)应该是我们用的十分频繁的两个东西
今天我们就在Nancy中,把这两个东西简单的用起来!
二、简单使用之区域
区域,无论是对开发过程还是代码管理都占据着一个重要的地位!
下面我们就来看看Nancy中的区域要如何用,其实,准确来说,
Nancy中并没有明确提出区域这个概念,也只是我凭着与MVC的对照,自己添加的一个好理解的概念
下面就来看一下吧,这里用到了Nancy,Nancy.Hosting.Aspnet这些引用
这里是所有的视图引擎通用的功能,所以就不添加特殊的视图引擎(Razor、Spark等)
先来看看我们的项目框架
我们定义了三个HomeModule,分别在不同的位置,Admin、Other、根目录
这样就相当于有了Admin、Other、根目录三个区域
具体的内容如下 :
Admin/HomeModule.cs
public class HomeModule : NancyModule
{
public HomeModule() : base("/admin")
{
Get["/"] = _ =>
{
return View["index"];
};
}
}
Other/HomeModule.cs
public class HomeModule : NancyModule
{
public HomeModule() : base("/other")
{
Get["/"] = _ => { return View["index"]; };
}
}
HomeModule.cs
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = _ =>
{
return View["index"];
};
}
}
同样的,我们也定义相应区域的视图!
具体如下 :
Views/Admin/Home/index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
Admin->Home->Index
</body>
</html>
Views/Other/Home/index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
Other->Home->Index
</body>
</html>
Views/Home/index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
Home -> Index
</body>
</html>
这样就简单的把不同的功能分在了不同的区域了,下面看看效果
是不是很简单呢!其实跟我们正常的用法没用多少区别!就是多了几个文件夹,便于管理。
我们也可以在Module中指定视图的位置,但简易还是区分开好一点,目的还是管理方便。
Nancy中视图引擎的细节,可以帮助我们更清晰的理解视图的加载等内容,由于这一块已经有园友讲述过了
在此我就不再重复了
三、简单使用之分部视图
分部视图这一块,我主要是讲一下关于Razor(因为个人用的比较多)
用法很简单
@Html.Partial(viewName,modelForPartial)
是不是跟MVC中的基本一致呢?
我们现在定义两个分部视图,首部_PartialHeader.cshtml和尾部_PartialFooter.cshtml
<div>首部</div>
<div>尾部</div>
然后定义一个布局页面_Layout.cshtml
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
<!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
@Html.Partial("/Partials/_PartialHeader")
<div>
@RenderBody()
</div>
@Html.Partial("/Partials/_PartialFooter")
</body>
</html>
下面编写Module返回一个视图index.cshtml
@{
Layout = "Views/_Layout.cshtml";
} 内容
运行结果
这个是静态的分部页面,下面我们绑定一下model,也就是在Partial带两个参数
编写一个分部视图_PartialTime.cshtml
<span>@Model</span>
在刚才的_Layout.cshtml中添加下面的代码
@Html.Partial("/Partials/_PartialTime", Model)
同时修改HomeModule
Get["/"] = _ =>
{
var model = DateTime.Now.ToString();
return View["index2",model];
};
运行
OK了,正是我们所期待的
注:如果不在页面添加@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
我们的智能提示是不会出现Partial的!!
Partial是通过HtmlHelper来实现的,不过Nancy中的HtmlHelper,可用的类型与MVC相比少了很多。
像 @Html.ActionLink()这些是没有的。