ASP.NET MVC 母版页
为什么使用母版页?为了整个站点样式统一,任何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 母版页的更多相关文章
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- ASP.NET MVC防范CSRF最佳实践
XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
- ASP.NET MVC搭建项目后台UI框架—1、后台主框架
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC 5 05 - 视图
PS: 唉,这篇随笔国庆(2015年)放假前几天开始的,放完假回来正好又赶上年底,公司各种破事儿. 这尼玛都写跨年了都,真服了.(=_=#) 好几次不想写了都. 可是又不想浪费这么多,狠不下心删除.没 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...
- [ASP.NET MVC 小牛之路]03 - Razor语法
本人博客已转移至:http://www.exblr.com/liam Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指 ...
随机推荐
- Spark 准备篇-环境搭建
本章内容: 待整理 参考文献: 学习Spark——环境搭建(Mac版) <深入理解SPARK:核心思想与源码分析>(前言及第1章) 搭建Spark源码研读和代码调试的开发环境 Readin ...
- Spring Boot 2.0 入门指南
0x01 什么是Spring Boot? Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起. 0x02 ...
- 每日英语:Doc, Do I Need A Juice Cleanse?
Some drink only vegetable juice. Others soak in Epsom salts. It's all in the pursuit of ridding the ...
- ElasticSearch性能优化策略【转】
ElasticSearch性能优化主要分为4个方面的优化. 一.服务器部署 二.服务器配置 三.数据结构优化 四.运行期优化 一.服务器部署 1.增加1-2台服务器,用于负载均衡节点 elasticS ...
- 【iCore3应用】基于iCore3双核心板的编码器应用实例
简介 本硬件电路方案是针对集电极开路输出的编码器设计的.隔离前电压为5V,同时5V也是编码器的驱动电压,由外部供电:隔离后电压为3.3V,由核心板提供.隔离芯片采用3通道ADUM1300隔离芯片.因为 ...
- 学习MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁节点
Add an Arbiter to Replica Set 在集群中加入仲裁节点,当集群中主节点挂掉后负责选出新的主节点,仲裁节点也是一个mongo实力,但是它不存储数据. 1.仲裁节点消耗很小的资源 ...
- 浏览器关闭、刷新、关闭标签事件,兼容IE8,chrome,firefox
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- Java知多少(55)线程
和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming). 多线程程序包含两条或两条以上并发运行的部分.程序中每个这样的部分都叫一个线程(thread ...
- 怎样利用Heartbeat与Floating IP在Ubuntu 14.04上创建高可用性设置
提供 ZStack社区 内容简单介绍 Heartbeat是一款开源程序,负责将集群基础设施容量--包括集群成员与消息收发--交付至客户server. Hearbeat在高可用性server基础设施其中 ...
- java.util.Stack(栈)的简单使用
import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实 ...