为什么使用母版页?为了整个站点样式统一,任何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的构造函数以实现数据查询,这样数据就显示在母版页上了。

ASP.NET MVC 母版页的更多相关文章

  1. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  2. ASP.NET MVC防范CSRF最佳实践

    XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...

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

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

  4. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  5. ASP.NET MVC 5 05 - 视图

    PS: 唉,这篇随笔国庆(2015年)放假前几天开始的,放完假回来正好又赶上年底,公司各种破事儿. 这尼玛都写跨年了都,真服了.(=_=#) 好几次不想写了都. 可是又不想浪费这么多,狠不下心删除.没 ...

  6. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

  8. 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理

    第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...

  9. [ASP.NET MVC 小牛之路]03 - Razor语法

    本人博客已转移至:http://www.exblr.com/liam  Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指 ...

随机推荐

  1. Android UI系列-----长度单位和内外边距

    这篇随笔将会记录一下在控件布局时,设定距离的三种长度单位:px.dp.sp以及内外边距的属性 1.三种长度单位 ①px:px是我们常见的一种距离单位,它表示的是一个单位像素,我们经常说我们手机或者电脑 ...

  2. SNF开发平台WinForm-Grid表格控件大全

    我们在开发系统时,会有很多种控件进行展示,甚至有一些为了方便的一些特殊需求. 那么下面就介绍一些我们在表格控件里常用的方便的控件:   1.Grid表格查询条 Grid表格下拉 3.Grid表格弹框选 ...

  3. java中的synchronized同步代码块和同步方法的区别

    下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...

  4. 最新以及历史各版本 .NET Framework 的下载

    唔,如题,详见地址:https://www.microsoft.com/net/download/windows

  5. Android 全局弹出版本更新 Dialog 思考和解决办法

    Android 针对版本更新,需要做全局的弹出(需求:版本更新只需要在 App 内全局弹出就可以),思路是使用 AlertDialog ,然后设置 setType 为 TYPE_ALERT_WINDO ...

  6. 物联网架构成长之路(16)-SpringCloud从入门到吹水

    1.前言 Spring Cloud 现在比较流行,版本更新也是蛮快的,网上资料也是很多.很多参考网上资料就可以学到了.这里给个 http://blog.csdn.net/forezp/article/ ...

  7. 【Python】 sort、sorted高级排序技巧

    文章转载自:脚本之家 这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Pyth ...

  8. 【Java】浅谈HashMap

    HashMap是常用的集合类,以Key-Value形式存储值.下面一起从代码层面理解它的实现. 构造方法 它有好几个构造方法,但几乎都是调此构造方法: public HashMap(int initi ...

  9. linux每日命令(6):rm命令

    rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. rm是一个危险的命令,使用的 ...

  10. 【iCore4 双核心板_FPGA】例程六:触发器实验——触发器的使用

    实验现象: 按下按键,绿色led亮灭交互: //--------------------module_rst_n---------------------------// module trigger ...