为什么使用母版页?为了整个站点样式统一,任何WEB应用程序都应该使用母版页。MVC框架中,有新的方式为母版页传递数据。
       一个WEB应用程序可以包含多个母版页,母版页用于定义页面布局,它与普通页面的最大区别是多了<asp:ContentPlaceHolder>标签,用于为子页面内容占位。当你创建视图内容页面(即普通页面)时,可以选择使用哪个母版页。内容页面中会添加<asp:Content> 标签来对应母版页中的<asp:ContentPlaceHolder>。在内容页面中,并不抱括<html>或者<head>这些标签。你必须把想要显示的内容放在<asp:Content>标签的范围内,否则预览页面时会报错。但是你并不用把所有<asp:ContentPlaceHolder>都用掉。
[1]修改内容页面
当你使用母版页时,默认会使用母版页的页面标题,如果想要自定义标题的话有两种方式:
(1)使用在页面源文件顶部的<%@ page %> 标签,如<%@ page title="Super Great Website" />
(2)有时你不仅需要修改标题,甚至需要修改meta标签里的内容,那么你在设计母版页时将可以将Title、Meta标签都包括在<asp:ContentPlaceHolder>标签内部,当视图页面需要覆盖这些内容时,你就可以用<asp:Content>标签来重新定义你的Title和Meta.
如一个母版页中这样定义:

Code

那么在视图页面中你就可以用Content 覆盖ContentPlaceHolder 里的部份:

Code

[2]传递数据
(1)简单的方式

使用ViewData将要显示的数据传递给母版页,ViewData是一个Dictionary结构,母版页与内容页面共用ViewData,只要通ViewData[key]的方式,就可以设置或获取对应的Value。你可以在母版页中迭代ViewData中的列表用来显示数据。但是这样做会有一个问题:你必须在所有使用了这个母版页的View对应的Action中为ViewData赋值,否则页面显示就会报“未将对像引用到对像实例”异常,为了解决这个问题,你不得不在所有Action中添加相同的代码,为母版页中的ViewData赋值,然而这样会导致你的程序的可维护性、适应性大打折扣。
(2)较好的解决方案

为了解决重复代码的问题,实现一次性为母版页赋值,可以定义一个抽像类实现ViewData赋值,而其它Contrller则继承这个抽像类。比如定义这样一个抽像类:

Code

这个类的构造函数中实现了查询数据,并赋值给ViewData。这个["categories"] 就是key,是母版页中使用到的。同时这个类继承了Controller。那么其它地方的Contrller就可以继承这个抽像类了:

public class MoviesController : ApplicationController

当界面显示时,由于MoviesController 继承自ApplicationController,所以会调用ApplicationController的构造函数以实现数据查询,这样数据就显示在母版页上了。

最新文章

  1. druid 配置
  2. 类UNIX操作系统概念
  3. SQL Server调优系列基础篇(联合运算符总结)
  4. 9.9,新iPhone要来了,是欢呼,还是墙角画圈,一会儿见分晓
  5. C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html
  6. oracle安装—Windows7旗舰版32位安装oracle10g方法
  7. Super关键字
  8. cocos2dx 音效 粒子 数据存储
  9. 用 gulp.spritesmith 自动化雪碧图
  10. 题目1083:特殊乘法-九度oj
  11. 学习python的第二天
  12. Asp.net Mvc 与WebForm 混合开发
  13. Oracle_CDC异步Autolog online redo部署示例
  14. “HtmlAgilityPack”已拥有为“System.Net.Http”定义的依赖项的解决方案
  15. Apache无法正常启动(配置多个监听端口)
  16. Kotlin 开篇
  17. 指令计数器--Program counter
  18. 怎么在Eclipse上运行静态网页
  19. 【Active入门-3】ActiveMQ学习-发布者与订阅者
  20. FDMemTable 数据集

热门文章

  1. curl 调用jenkins的api
  2. Atitit 提升开发进度大方法--高频功能与步骤的优化 类似性能优化
  3. Windows环境下安装PIL(Python Imaging Library)库
  4. LeetCode: First Missing Positive 解题报告
  5. js调用winform程序(带参数)
  6. React Native 进的第一个坑
  7. 关于使用maven打包如何聚合资源文件
  8. 有趣的JavaScript原生数组函数
  9. wpf 模板选择器DataTemplateSelector及动态绑定,DataTemplate.Triggers触发器的使用
  10. 《深入理解Java虚拟机》读书笔记:垃圾收集器与内存分配策略