MVC5系列——布局视图

目录

系列文章

概述

布局视图

系列文章

[Asp.net MVC]Asp.net MVC5系列——第一个项目

[Asp.net MVC]Asp.net MVC5系列——添加视图

[Asp.net MVC]Asp.net MVC5系列——添加模型

[Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

[Asp.net MVC]Asp.net MVC5系列——添加数据

[Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

[Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图

[Asp.net MVC]Asp.net MVC5系列——Razor语法

[Asp.net MVC]Asp.net MVC5系列——Routing特性

概述

由于前段时间,项目一直吃紧,mvc的学习中断了,周末了,心里一直惦记这事,很早就起来了,把之前写的文章看了一遍,以便找到再次入手的地方,想开始,就想着最近的lync项目的管理端有用到asp.net的模版MasterPage,那就顺便就说说asp.net mvc 中的布局视图吧。目前项目告一段落,个人正在将lync的群组空间,使用mvc进行改写。

布局视图

新建一个mvc5项目,你会在Views目录下看到一个shared的文件夹,其中视图_Layout.cshtml就是布局视图,类似于webform中的Masterpage。如下图所示,

新建一个内容视图,来应用该布局视图,如图所示,

使用布局页后,会在视图中生成如下代码,每一个视图通过使用Layout属性指定它的布局:

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
} <h2>Index</h2>

如果每个视图,应用同一个布局,就会产生冗余的代码,并且难以维护,上面第一张图中你也看到了有个_ViewStart.cshtml的视图,该视图非常简单,只有一句代码,指定默认的布局:

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}

这个文件中的代码优先于同目录下的任何视图代码的执行。这个文件也可以递归地应用到子目录下的任何视图。

由于这个代码优先于任何视图的运行,所以一个视图可以重写Layout属性的默认值,从而重新选择一个不同的布局。如果一组视图拥有共同的设置,那么_ViewStart.cshtml文件的好处就体现出来了,因为我们可以在它里面对共同的视图配置进行统一的设置。如果有视图要覆盖统一的的设置,我们只需要修改对应的属性值值即可。

如果不想应用模板页,则指定Layout属性为null即可。

在_Layout.cshtml布局视图中,你总可以找到类似下面的代码:

   <div class="container body-content">
@RenderBody()
</div>

@RenderBody()是一个占位符,用来标记使用这个布局的视图将渲染它们的主要内容的位置,如果您哟webform基础,你它的功能就类似于webform中的ContentPlaceHolder,但是跟ContentPlaceHolder还是有区别的,webform中ContentPlaceHolder根据id的不同可以有多个,但是@RenderBody()有且只能有一个。

那如果我们想在内容页中使用引用的资源,比如css或者js怎么办?

在webform中我们通常是这样做的

MasterPage中

    <asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>

应用该模版的webform内容页

1 <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
2 <script type="text/javascript" src="../js/zTree/jquery-1.4.4.min.js"></script>
3
4 </asp:Content>

在Asp.net mvc中是这样处理的

@RenderSection

用于在模板布局中定义一个区域,在内容页可以定义一些内容来填充这个区域,例如内容页中引用的JS文件,可以填充到模板页的section位置。每个内容页的单独一些信息,可以在模板页中这个区域显示。

@RenderSection有两个参数,第一个参数用于定义section的名称,第2个参数是布尔类型,如果为true,表示内容页必须定义这个section,如果为false,则表示内容页可定义section,也可以不定义。

例如在布局页中这样写

<head>
@RenderSection("script",false);
</head>

在使用该布局的视图中

1 @section script{
2 <script type="text/javascript" src="../js/ParameterConfigJs.js"></script>
3 }

@RenderPage

另外也可以使用 @RenderPage进行布局

用于表示在一个页面中呈现另一个页面的内容.参数指定要呈现的网页的位置。

我们在Shared文件夹下面新建一个footer.cshtml文件,然后里面写上版权信息,然后在模板页中用来呈现footer页面,如下:

1 <footer>
2 <p>@RenderPage("~/Views/Shared/footer.cshtml")</p>
3 </footer>

@Html.Partial()与Html.RenderPartial()

分部页也可以达到布局的目的。

这两个方法可以用来输出一个分部页,右键添加新建项,选择MVC5分部页,就可以添加一个分部页,相当于webform中用户控件页。

@Html.Partial()的参数为用户控件名称,也就是分部页名称,返回值为string类型,可以直接输出。

@Html.RenderPartial()的参数也为用户控件名称,返回值为void,调用的时候直接把内容输出到Response中。

例如:

1             @Html.Partial("_PartialDeptTree")
2 @{
3 Html.RenderPartial("_PartialDeptTree");
4 }

可以将组织结构数放在分布视图中来用。

 
分类: ASP.NET MVC
标签: asp.net mvc5布局

MVC5系列——布局视图的更多相关文章

  1. [Asp.net MVC]Asp.net MVC5系列——布局视图

    目录 系列文章 概述 布局视图 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net M ...

  2. [Asp.net MVC]Asp.net MVC5系列——添加视图

    目录 系列文章 概述 添加视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 概述 在这一部分我们添加一个新的控制器HelloWorldController类, ...

  3. Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图

    目录 概述 实现信息的明细视图 实现信息的编辑视图 实现信息的删除视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net ...

  4. [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  5. [Asp.net MVC]Asp.net MVC5系列——添加模型

    目录 概述 添加模型 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 概述 在本节中我们将追加 ...

  6. [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

    目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net M ...

  7. [Asp.net MVC]Asp.net MVC5系列——添加数据

    目录 概述 显示添加数据时所用表单 处理HTTP-POST 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列 ...

  8. Asp.net MVC]Asp.net MVC5系列——Routing特性

    目录 概述 路由特性 使用路由 可选参数和参数的默认值 路由前缀 默认路由 路由约束 自定义路由约束 路由名 区域(Area) 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列— ...

  9. Asp.net MVC]Asp.net MVC5系列——在模型中添加

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

随机推荐

  1. 使用Eclipse设定Android开发环境

    使用Eclipse设定Android开发环境 花了大概几天的时间最终搭建好了开发Android的环境了! 我是使用Eclipse +ADT顺利地搭建Android开发环境的. 如今Google以及An ...

  2. 华夏互联与逐浪CMS旗下三款软件获著作权登记

     北京时间2014年7月24日消息: 上海逐一软件科技公司长下三款软件通过中国知识产权局登记,当中包含全新的CMS2 x2.0主产品.移动门户管理系统.云台管理系统. 除主产品CMS2 x2.0( ...

  3. validform.js使用方法

    表单验证之validform.js使用方法 一.validform有什么用? 网页上有大量的input需要你进行验证的时候,如果是弹窗的话,需要不停地判断,如果为空,弹窗.如果不是数字,弹窗. 所以要 ...

  4. ZOJ1610_Count the Colors(段树/为段更新)

    解决报告 意甲冠军: 一定长度8000段染.寻求染色完成后,.. 思路: 区间问题用线段树.成段的更新区间.最后把全部的区间下压到叶子结点,统计叶子结点的颜色. #include <iostre ...

  5. 省前训练...Orz

    A. 异形卵 Time Limit: 1000ms Memory Limit: 128000KB 64-bit integer IO format:      Java class name: Sub ...

  6. XML概要

     早在两年前,我一直听说XML,但是,只是没有时间去研究它.也不知道它的作用,花了一些时间最近几天来学习他们的语言.是XML的一些简介希望能对各位同学有所帮助: XML是eXtensible Ma ...

  7. oracle当需要commit

    今天oracle的SQL plus 运行该删除和查询操作,然后PL/SQL还运行查询.相同的句子,结果是不一样的.我郁闷很大,然后,突然想到这可能对双方造成由数据不一致,为什么不一致呢.就是没用com ...

  8. Nyoj 修路方案(次小生成树)

    描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. 现在已经知道哪些城市之间可以修路,如果修路,花费是多少. 现在,军师小工已经找到 ...

  9. Nyoj 吝啬的国度(图论&&双DFS)

    描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...

  10. .NET中Redis安装部署及使用方法简介

    一Redis服务端以服务方式运行 修改端口压缩文件中配置的是6488 修改密码 修改库的数量 工具配置安装后如下图 二Redis服务端以控制台方式运行 第一步配置本地服务 第二部安装和配置客户端 三C ...