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#指 ...
随机推荐
- CentOS7中systemctl的使用与CentOS6中service的区别
https://blog.csdn.net/u012834750/article/details/80501440 从CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon ...
- PureFTP被动端口设置
修改Pureftp的配置文件把 # PassivePortRange 30000 50000 把前面的#删除 重启pureftpd 注意把被动端口防火墙例外 如果是阿里云主机 安全规 ...
- PCA主成份分析学习记要
前言 主成份分析,简写为PCA(Principle Component Analysis).用于提取矩阵中的最主要成分,剔除冗余数据,同时降低数据纬度.现实世界中的数据可能是多种因数叠加的结果,如果这 ...
- Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程
以下步骤在Windows 7系统中操作.XBox One手柄+无线适配器并非仅只能在Windows 10中使用. 一点感想:微软的XBoxOne手柄实在是好东西,但产品使用说明与文档实在太垃圾,翻遍官 ...
- select理解
https://www.cnblogs.com/skyfsm/p/7079458.html
- JVM 内部原理(一)— 概述
JVM 内部原理(一)- 概述 介绍 版本:Java SE 7 图中显示组件将会从两个方面分别解释.第一部分涵盖线程独有的组件,第二部分涵盖独立于线程的组件(即线程共享组件). 目录 线程独享(Thr ...
- Java知多少(78)Java向量(Vector)及其应用
Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据(数据列表).但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一 ...
- 深度学习的batch_size
知乎讨论: https://www.zhihu.com/question/61607442/answer/204675996 案例一 http://www.myzaker.com/article/5a ...
- 问题:UltraISO:这个软件有问题,它制作的iso文件会造成无法正确识别。用PowerISO吧
最近研究硬盘安装 centos7.6 (rhel 7.6)的 硬盘安装,因为原版dvd超过4G了,所以通过删除java-open-jdk的方式减少dvd光盘的大小. 但是前期用UltraISO制作的i ...
- nginx-启动|关闭|重新加载配置文件的命令
1.1 进入操作目录 D: cd D:\NginxTest\nginx-1.10.2 1.2 启动指令 nginx -c conf\nginx.conf 1.3 关闭指令 nginx -s stop ...