[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系列——实现编辑、删除与明细信息视图
[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内容页
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script type="text/javascript" src="../js/zTree/jquery-1.4.4.min.js"></script> </asp:Content>
在Asp.net mvc中是这样处理的
@RenderSection
用于在模板布局中定义一个区域,在内容页可以定义一些内容来填充这个区域,例如内容页中引用的JS文件,可以填充到模板页的section位置。每个内容页的单独一些信息,可以在模板页中这个区域显示。
@RenderSection有两个参数,第一个参数用于定义section的名称,第2个参数是布尔类型,如果为true,表示内容页必须定义这个section,如果为false,则表示内容页可定义section,也可以不定义。
例如在布局页中这样写
<head>
@RenderSection("script",false);
</head>
在使用该布局的视图中
@section script{
<script type="text/javascript" src="../js/ParameterConfigJs.js"></script>
}
@RenderPage
另外也可以使用 @RenderPage进行布局
用于表示在一个页面中呈现另一个页面的内容.参数指定要呈现的网页的位置。
我们在Shared文件夹下面新建一个footer.cshtml文件,然后里面写上版权信息,然后在模板页中用来呈现footer页面,如下:
<footer>
<p>@RenderPage("~/Views/Shared/footer.cshtml")</p>
</footer>
@Html.Partial()与Html.RenderPartial()
分部页也可以达到布局的目的。
这两个方法可以用来输出一个分部页,右键添加新建项,选择MVC5分部页,就可以添加一个分部页,相当于webform中用户控件页。
@Html.Partial()的参数为用户控件名称,也就是分部页名称,返回值为string类型,可以直接输出。
@Html.RenderPartial()的参数也为用户控件名称,返回值为void,调用的时候直接把内容输出到Response中。
例如:
@Html.Partial("_PartialDeptTree")
@{
Html.RenderPartial("_PartialDeptTree");
}
可以将组织结构数放在分布视图中来用。
[Asp.net MVC]Asp.net MVC5系列——布局视图的更多相关文章
- MVC5系列——布局视图
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系列——第一个项目 概述 在这一部分我们添加一个新的控制器HelloWorldController类, ...
- [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系列——从控制器访问模型中的数据
目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net M ...
- [Asp.net MVC]Asp.net MVC5系列——添加数据
目录 概述 显示添加数据时所用表单 处理HTTP-POST 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列 ...
- Asp.net MVC]Asp.net MVC5系列——Routing特性
目录 概述 路由特性 使用路由 可选参数和参数的默认值 路由前缀 默认路由 路由约束 自定义路由约束 路由名 区域(Area) 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列— ...
- Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图
目录 概述 实现信息的明细视图 实现信息的编辑视图 实现信息的删除视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net ...
- Asp.net MVC]Asp.net MVC5系列——在模型中添加
目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...
随机推荐
- java读写properties配置文件方法
1.Properties类 Properties类表示了一个持久的属性集.Properties可保存在流中或从流中加载,属性列表中的key和value必须是字符串. 虽然Properties类继承了j ...
- 开源http协议库curl和wget的区别和使用
curl和wget基础功能有诸多重叠,如下载等. 在高级用途上的curl由于可自定义各种请求参数所以长于模拟web请求,用于测试网页交互(浏览器):wget由于支持ftp和Recursive所以长于下 ...
- mysql,int(5)、int(10)啥区别联系
实际没啥区别..这个5和10并不是最大5位,最大10位的意思. 好比选择了int(5),并且当你选择了0填充的话.你的数据假设存了123,那么你的显示会是00123,(有些操作mysql的工具看不出来 ...
- 详解分布式应用程序协调服务Zookeeper
主从结构:HDFS.Yarn.HBase.storm.spark.zookeeper都存在单点故障问题 hadoop1.x没有解决方案 hadoop2.x利用zookeeper实现HA zookeep ...
- 20155220 Exp5 MSF基础应用
Exp5 MSF基础应用 一个主动攻击实践,MS08-067 首先利用msfconsole启用msf终端 然后利用search MS08-067搜索漏洞,会显示相应漏洞模块 根据上图,我们输入use ...
- # 2017-2018-2 20155231《网络对抗技术》实验九: Web安全基础实践
2017-2018-2 20155231<网络对抗技术>实验九: Web安全基础实践 实验要求: 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验内容: ( ...
- Exp9 Web安全基础实践
Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? 对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等. 不要使用动态拼装sql,可以使用参数 ...
- android全屏
this.requestWindowFeature( Window.FEATURE_NO_TITLE ); this.getWindow().setFlags(WindowManager.Layout ...
- js中的数据类型及判断方法
ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型. 基本类型 ● Boolean ● Null ● Undefined ● Number ● String ● Symbol (ECM ...
- 4字节emoji表情对应的Unicode编码获取和编码转换
GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了: 其中GFM的表情语法不错,比 ...