上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到,本篇来说解一下视图中的分段概念、和分部视图的使用。javascript
分段的使用css
在ASP.NET MVC框架的Razor引擎中有着分段的概念,分段什么意思呢?分段的意思就是把视图分红几个自定义的分段,而且交由布局来控制分段的显示。说是这么说,咱们仍是来看一看代码的定义,首先是使用了分段的视图代码的定义,示例代码1-1.html
代码1-1java
@{ ViewBag.Title = "ViewPartCase"; } <h2>ViewPartCase</h2> @section PartOne { <h1>这是使用分段的示例:分段一</h1> } @section PartTwo { <h1>这是使用分段的示例:分段二</h1> } @section PartThree { <h1>这是使用分段的示例:分段三</h1> }
在代码1-1中,使用@section标间来建立分段,然后面紧跟着的就是自定义分段的名称,这个时候布局的代码如示例代码1-2.jquery
代码1-2框架
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> <body> @RenderBody() </body> </html>
这个时候的运行结果如图1。ide
图1布局
很明显的看到图1中所提示的错误信息,在布局中并未定义PartOne、PartTow、PartThree。spa
这样咱们只能修改代码1-2,修改布局中的定义,修改后的示例代码1-3.code
代码1-3
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> @RenderSection("PartOne") @RenderSection("PartThree") <body> @RenderBody() </body> @RenderSection("PartTwo") </html>
在代码1-3中@RenderSection标签用于显示指定的分段,参数为自定义的分段名称,这里你们要清楚一个概念,就是布局的定义是来引导视图分段的定义,只不过在本篇幅是为了让你们清楚的理解因此颠倒了顺序,实际运用中应该是先定义好布局中所要使用的分段,以及指示的分段名称,而后在视图的定义中若是要使用当前的布局则会根据当前布局中的指定的分段名称来定义内容。看下以上代码运行结果如图2.
图2
好比说如今我是先定义好的代码1-3,而后要我定义我要呈现的页面也就是咱们的视图,像代码1-1那样定义就是正常的应用顺序,那我如今修改代码1-1,由于我不想个人视图中使用分段,示例代码1-4
代码1-4
@{ ViewBag.Title = "ViewPartCase"; } <h2>ViewPartCase</h2>
正如你们所看到的,代码1-4也就是我修改后的视图,就是显示一个标题,不想有其余的东西,再次运行结果如图2.
图3
图3中明确的指示出了视图中并未定义名为PartOne的分段,因此才会致使这样的错误,就算定义了PartOne,到了PartThree还要定义,否则接着报错,这就是强制约束了,这样多不人道主义阿对吧。
面对这样的状况,咱们有两种方式来处理这种状况,
第一种,使用IsSectionDefinde()方法,方法参数即为分段名称,以此判断视图中是否认义了此名称的分段,若是定义了则会返回true,不然返回false(下面代码会给出示例)。
第二种,使用@RenderSection()方法的重载版本,讲第二个参数设置为false,若是视图中包含了方法参数所指定的分段则会显示,没有则不会报出异常。
如今咱们来看一下,修改布局代码1-3中的代码以此演示上面说到的两种状况,示例代码1-5.
代码1-5
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> @if (IsSectionDefined("PartOne")) { @RenderSection("PartOne") } @RenderSection("PartThree",false) <body> @RenderBody() </body> @RenderSection("PartTwo",false) </html>
这个时候咱们再来看一下结果图4,,
图4
分部视图的使用
对于分部视图的使用其实也就是跟视图同样的,可是分布视图跟视图的区别在于分部视图是禁用布局的,也就是说上面小节所说的分段在分部视图中使用是毫无心义的,下面咱们就来看一下分部视图的定义
图5
图5中并无建立强类型的分部视图,这样作的意义不大,在点击“添加”按钮后,所呈现的代码页面是个空的页面什么都没有,这里主要是给你们看一下分部视图在编译后类型所呈现的样子也就是跟普通的视图没什么区别,示例代码1-6.
代码1-6
public class _Page_Views_iocdemo_CustomPartialView_cshtml : System.Web.Mvc.WebViewPage<dynamic> { #line hidden public _Page_Views_iocdemo_CustomPartialView_cshtml() { } protected ASP.global_asax ApplicationInstance { get { return ((ASP.global_asax)(Context.ApplicationInstance)); } } public override void Execute() { WriteLiteral("<h1>PartialView</h1>"); } }
代码1-6所呈现的就如同在ASP.NET MVC 视图(二)中最后所示的示例那般,核心的地方是不会变的,咱们仍是来删除掉这个分部视图,从新添加一个一样命名的强类型视图,或者直接使用@model标签来引用一个类型做为视图的Model类型,示例代码1-7.
代码1-7
@model MvcApplication.Models.CustomerInfo <h1>@Model.ID</h1> <h2>@Model.Name</h2> 咱们再看一下对于分部视图使用的视图的代码定义,示例代码1-8 代码1-8 @model IEnumerable<MvcApplication.Models.CustomerInfo> @{ ViewBag.Title = "ViewPartCase"; } <h2> ViewPartCase</h2> @foreach (var model in Model) { @Html.Partial("CustomPartialView",model) }
最后的呈现的界面如图6.
图6
做者:金源
出处:http://www.cnblogs.com/jin-yuan/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面