本文目标

1.能够重用Razor模板进行页面的组件化搭建

本文目录

1.母板页_Layout.cshtml

2.用户自定义控件

3.默认Layout引用的使用(_ViewStart.cshtml)

1.母板页_Layout.cshtml

类似于传统WebForm中的.master文件,起到页面整体框架重用的目地

1.母板页代码预览

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>@ViewBag.Title</title>
 5     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
 6     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
 7 </head>
 8
 9 <body>
10     @RenderBody()
11 </body>
12 </html>

2.子页面标题的设置

虽然多个子页面可以引用同一个母板页,但不同的页面标题可以单独设置。@ViewBag.Title 即是一个标题的占位符,在Control里或页面中给该标题的变量赋值。

 1         //LayoutDemo_01
 2         public ActionResult LayoutDemo_01()
 3         {
 4             ViewBag.Title = "布局页一";
 5             return View();
 6         }
 7
 8         //LayoutDemo_02
 9         public ActionResult LayoutDemo_02()
10         {
11             ViewBag.Title = "布局页二";
12             return View();
13         }

1 @{
2     ViewBag.Title = "布局页一";
3 }

3.子页面主内容的设置
页面主内容是由@RenderBody()来标识的。子页面的内容直接替换到该方法处。

 1 //第一个页面
 2 @{
 3     Layout = "~/Views/Shared/_Layout.cshtml";
 4 }
 5 这里是layoutg一的内容
 6
 7
 8 //第二个页面
 9 @{
10     Layout = "~/Views/Shared/_Layout.cshtml";
11 }
12 这里是layout二的内容 

4.子页面其他内容的设置

由于母板面的内容大多数不会是连续的,如下代码所示:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>@ViewBag.Title</title>
 5     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
 6     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
 7 </head>
 8 <body>
 9     <br />
10     @* 主要部分*@
11     @RenderBody()
12     <br />
13     <br />
14     @*其他部份内容*@
15     @RenderSection("MasterPart", false)
16 </body>
17 </html>

此时我们使用@RenderSection定义占位符子页面实现,@RenderSection方法接受两个参数:("名称","是否是必须的"),如果是必须的那么子页面必须实现该方法,否则会报错。
子页面代码如下:

1 @{
2     Layout = "~/Views/Shared/_Layout.cshtml";
3 }
4 这里是layoutg一的内容
5 @section MasterPart{
6 这里是母板页的第二部分
7 }

@section+空格+名称{内容}来实现母板页内容的替换。
5.其他注意项

母板页的命名可以随意,但建议以"_"下划线开头。

6.整体运行效果

2.用户自定义控件

创建时选中Create as a patial view

创建后在页面中填写如下代码:

使用时代码如下:

1 @{
2     Layout = "~/Views/Shared/_Layout.cshtml";
3 }
4 @Html.Partial("~/Views/Shared/_UserControl.cshtml")
5 这里是layoutg一的内容

运行效果如下:

3.默认Layout引用的使用(_ViewStart.cshtml)

当我们的页面未指定Layout的时候,如果项目在全局或在同文件夹内存在_ViewStart.cshtml时该页面的Layout会自动继承自_ViewStart.cshtml,如果不同的文件夹层级都存在_ViewStart.cshtml,则继承离该页面最近的一个。_ViewStart.cshtml是一个特殊的文件。

1.使用全局_ViewStart.cshtml

_ViewStart.cshtml的文件位置和内容,如下图所示:

我们在User文件夹里建立页面LayoutDemo_03.cshtml,如下图所示:

在LayoutDemo_03.cshtml并没有定义Layout,但实际上他的Layout继承了_ViewStart.cshtml为:

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

运行效果如下:

2.使用文件夹内的_ViewStart.cshtml

在Shared文件夹内新建文件_LayoutNew.cshtml,如下图所示:

我们在上面加了区别的文字"新的布局",然后在User文件夹内新建文件_ViewStart.cshtml,如下图所示:

我们把User文件夹内的_ViewStart.cshtml的内容修改为Layout = "~/Views/Shared/_LayoutNew.cshtml";,此时我们再次浏览LayoutDemo_03.cshtml的时候,该页面的布局的引用会继承User文件夹内的_ViewStart.cshtml,运行效果如下:

说明:如果不想页面使用任何母板页和布局页,则需要设置Layout = null,如下所示:

1 @{
2     Layout = null;
3 }

MVC中,视图的Layout使用相关推荐

  1. java调用视图如何传参_Spring MVC中 视图 向 控制器 传参(接收方式)

    1.方法一(通过HttpServletRequest方式接收) 1.1.添加servlet的jar包 javax.servlet javax.servlet-api 3.1.0 provided 1. ...

  2. MVC中视图访问的约定

    通常访问视图的时候,都会去选择访问Views文件夹内对应于Controller同名的文件夹下的某一个视图,这个视图对应于这个Controller类的某一个方法. 其实,也可以让这个方法对应于不同名的c ...

  3. ASP.NET MVC中的模型装配 封装方法 非常好用

    下面说一下 我们知道在asp.net mvc中 视图可以绑定一个实体模型 然后我们三层架构中也有一个model模型 但是这两个很多时候却是不一样的对象来的 就拿微软的官方mvc例子来说明 微软的视图实 ...

  4. 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

    索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...

  5. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  6. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?

    起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...

  7. Spring MVC中的视图解析ViewResolver

    http://blog.csdn.net/prince2270/article/details/5891085 在Spring MVC中,当Controller将请求处理结果放入到ModelAndVi ...

  8. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  9. mvc的视图中显示DataTable的方法

    mvc的视图中显示DataTable的方法: 不断的循环画出table @{ViewBag.Title = "ShowDataTable"; } @using System.Dat ...

  10. asp.net mvc 中的部分视图

    使用方法:@Html.Action(action, controller) 加载局部页面. 例如在模板页中使用:@Html.Action("Contact", "Comp ...

最新文章

  1. 传说中的WCF:消息拦截与篡改
  2. php 开启 pathinfo,nginx下PHP开启pathinfo模式
  3. 软件史上最伟大的十大程序员(图文)
  4. css rem 大屏开发_px/em/rem的区别与应用
  5. 那位标榜技术驱动的开发者去哪了?
  6. 在VS2003下把一个DataTable Update 到数据库
  7. Python学习笔记——变量和字符串
  8. AsyncTask 很好
  9. PSR-4——新鲜出炉的PHP规范
  10. win7 自带计算机(for programmer)
  11. Java常见异常总结
  12. 车牌识别系统原理及代码【YOLO+MLP】
  13. Bada学习-(十一)文件系统
  14. 灵活用工系统开发|劳务派遣有风险吗?
  15. 网狐棋牌游戏平台服务器架构设计分析[转]
  16. 用python绘制字符画
  17. 全网最全Python操作Excel教程,赶紧收藏
  18. php切图工具,ps切片工具怎么切图
  19. 转:程序员常用不常见很难得的地址大全,博主很辛苦
  20. AI+医疗:使用神经网络进行医学影像识别分析 ⛵

热门文章

  1. 提交调用验证_干货丨RPA验证码识别技巧
  2. mate40能更新鸿蒙,Mate40领衔更新!鸿蒙系统首批升级机型名单:这些机型可坐等推送...
  3. FPGA的设计艺术(16)逻辑设计中无刻不在的判断之if/case语句
  4. IC/FPGA笔试题分析(六)用16bit加法器IP核实现8bit乘法运算(文末彩蛋)
  5. 【 Verilog HDL 】清晰的时序逻辑描述方法之计数器的描述范例
  6. xml、 Dao service 三层参数以及对应关系
  7. Spark源码分析之九:内存管理模型
  8. 动态调用WCF不添加服务(svcutil.exe)
  9. 解决SQL Server里sp_helptext输出格式错行问题
  10. MCSE2003学习之四