asp.net服务器端指令include的使用及优势介绍
asp.net中的服务端包括指令简单点就是一个<!-- #include file|virtual="filename" –>这样的指令,msdn中的名词解释是:将指定文件的内容插入 ASP.NET 文件中,包括网页(.aspx 文件)、用户控件文件(.ascx 文件)和 Global.asax 文件。插入静态文件这个基本功能就不说了,插入aspx、ascx,这功能算是挺强了,asax哥就有点困惑了,这个暂且不管,今天要说的就是这个指令。
尴尬的存在
服务器端包括指令在web的开发技术中肯定是个标配了。asp.net前身asp中就已经有了这个指令,做为唯一一个引用外部文件的指令,入门的开发人员都应该使用过;php中的include、require,几乎用滥了,曾经使用过一段php,这指令常用的不能再常用了;jsp没过开发经验,搜索了下,也有这个include指令,使用情况应该也很平常。但是asp.net中的include几乎是在被遗忘的角落里,读过的asp.net的书里,很少会提到它。因此,对于没有asp开发经验直接学习asp.net的来说,可能要本不知道它的存在。为什么??
造成尴尬存在原因之一,就是webform中最重要的功能之一:用户控件。为什么要使用include,是因为被引用的内容会在很多地方被使用到--重用,例如页头、页脚、网站功能块。而恰恰用户控件就是为此而生,它天生可重用的特性,及强大的控件事件流程,就如MSDN中所说:
“尽管您仍然可以使用 #include 标记(通过将公共服务器端代码、控件或 HTML 标记放入要包括在其他网页中的文件内)以实现代码重用,ASP.NET 常用的首选方法是使用 Web 用户控件。用户控件提供了一个面向对象的编程模型,并且提供了比服务器端包含文件更多的功能。”
微软都不待见它了,紧接着,include也被开发人员打入冷宫,但是,请不要忘记,它存在。
include详解
说是详解,其实不打算在这里详解,请参见:服务器端包括指令语法。语法、用法、示例什么的,这里也不说,大家自己去看或自己试验吧。
include优势
说到优势,肯定要有个比较的对象了,对了,这个对象就是用户控件。用户控件是啥玩意,不解释。
优势之一:静态文件的重用。
用户控件功能强大,但是即使是简单如静态内容以用户控件的形式实现,它也必须经历用户控件的生命周期,相比性能就差了。
你可能会说,现如今网站又有多少还能是纯静态的内容呢,譬如页脚,那些项肯定也是网站CMS后台管理的,怎么可能以静态文件的形式存在,只能使用用户控件,并且给用户控件加上outputcache,这样即保证了灵活性,性能也能有保证,这样才是最完美的。
不错,第一,不同的项目不同的需求,肯定有些时候就是会引用静态内容,这时要保证使用这些静态内容以静态的形式存在,不要放到用户控件里。第二,网站的优化,无论何时,总有一种观点,就是静态化,例如上边的页脚,我们可以通过生成一个静态的页脚文件,当CMS对这些项有修改时,重新生成这个文件,然后通过include方式引用,相对于缓存的不可预测性和一定的不可控性,优势比用户控件还要灵活,并且性能更好。第三,协作,就是对于比较大型的网站,页面某些控件,但是这些数据是其它团队负责的,而一些相对稳定的内容或者对变化不太敏感的内容,生成静态文件之后自动分发,而对于这些文件的引用也是很常见的。
其实这个也可能是唯一的include的优势了。
优势之二,可穿透的封装。
可重用的东西一般都是封装的。用户控件是一个独立的个体,它寄宿于页面,但本身却像是页面上一个自由王国,碰到王国内部的处理,页面会把处理权交给控件自己的去处理,例如页面page_load加载时,碰到控件只能调用控件提供的load处理方法,这就是控件的封装,只有自身愿意公开的属性和方法才能被页面访问,这是标准的封装,这也是由asp.net的页面生命周期决定的。因此,如果控件要使用寄宿页面的一个变量,那么它应该公开一个属性,然后由页面在代码里主动给它赋值。
同样的,不同的机制决定了不同的行为。从MSDN中:
赋予 File 或 Virtual 特性的值必须用引号 ("") 括起来。在执行任何动态代码之前处理被包含的文件。
重要的一句,在执行任何动态代码之前处理被包含的文件。这句话什么意思??
一层意思就是说被包含文件在被处理之后内容才会加入到页面中,动态代码执行时,执行的代码根本就区分不出来这块内容是引用的还是自己本来就有的,也就是说我们可以用来重用的静态文件里加入<% 代码 %> 或者<%= 页面变量 %> 这样的代码,它们会被页面处理为相应的内容。这就是我所谓的“可穿透的封装”。这种方法当然比控件公开属性,页面主动赋值要更灵活。
二层意思如果引用的aspx或ascx,那么会在引用的动态内容执行输出之后,页面代码才会执行,这样就不如用户控件调用将流程在页面内好了,尽量不要使用include引用动态页面。
因此我们应只用include引用静态文件,但是静态文件里可以包含服务端标记代码。
知无不言,但怎奈能力有限,词不达意,就当抛砖引玉吧。大家尽量看,不过可以肯定的是可以以静态文件存在的重用就用include吧。可能还会有其它更适合的使用场景和更多的优势,还请有充分经验的补充。
相关文章
VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)
这篇文章主要介绍了VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h” 或者 检测到 #include 错误。请更新includePath) (POSIX API),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-13- 这篇文章主要介绍了基于mybatis中<include>标签的作用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-20
include包含头文件的语句中,双引号和尖括号的区别(详解)
下面小编就为大家带来一篇include包含头文件的语句中,双引号和尖括号的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25php include提示failed to open stream: Permission denied in错误
出现failed to open stream: Permission denied in是apache运行用户没用权限去访问指定的文件了,所以导致目录文件打不开了。 在打开浏览器时提示 Warning: includ...2016-11-25php中set_include_path和require,include介绍
在php中set_include_path会导致require,include用法不一样了,对于这个问题我们来看一个简单的例子,具体如下。 在PHP中经常使用include,require来引用其他文件,使用相...2016-11-25- php教程中文目录 include错误解决访求 include_path='.;c:php5pear'的错误 warning: unknown: failed to open stream: no such file or directory in unknown on line...2016-11-25
- 在C++中,所有的文件操作,都是以流(stream)的方式进行的,fstream也就是文件流file stream。这篇文章主要介绍了C++中#include头文件,需要的朋友可以参考下...2020-06-25
- include()和require()的区别 这相信是PHP中最基本的问题了,也是很多公司面试时必考的题呵呵。 给大家复习一下: require() :如果文件不存在,会报出一个fatal error.脚本...2016-11-25
- 如果你做过各种大小的Web站点,一定会对重用代码段的重要性深有体会,不管是HTML还是PHP代码块。比如需要一年修改一次包含版权信息的页脚,而你有1000个Web页(就算是10...2016-11-25
php 中require和include引用url和 php的文件编码转换函数问题
本文章同时解决两个问题就是php 中require和include引用url和 php的文件编码转换函数问题,有需要的朋友可以看看哈,参考一下。 PHP配置中“allow_url_fopen&rd...2016-11-25php中include require utf-8文件时顶部产生空行的
本文章来介绍关于php中include require utf-8文件时顶部产生空行的解决办法有需要学习的朋友可参考。 include()产生一个警告而require()则导致一个致命错误。换...2016-11-25再讲php中require(),include(),require_once()和include_once()他们的区别
本文章介绍了php四种调用外部文件函数用法和区别,有需要了解的朋友可以参考一下。 引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。 requi...2016-11-25简单谈谈PHP中的include、include_once、require以及require_once语句
include() 、require()语句包含并运行指定文件。这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。include()则继续即行。...2016-04-26- PHP Include 文件 服务器端包括 您可以插入的内容的文件到PHP文件之前,服务器执行它,与包括( )或要求( )函数。这两项职能是相同的各种方式,但他们如何处理错误。在包括( )函...2016-11-25
- php set_include_path 函数 set_include_path ( PHP 4中“ = 4.3.0 , PHP 5中) set_include_path -集和include_path配置选项 描述 字符串set_inclu...2016-11-25
- 引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。 require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的...2016-11-25
require,include和require_once,include_once 出现open_basedir错误
我们在require,include和require_once,include_once 出现open_basedir错误,下面百度了一些解决方法有, 需要的朋友可参考一下。 只要使用require或include包含文件(不...2016-11-25php文件调用与包含几个函数include_once() require_once()include()require()
require() require() 语句包括并运行指定文件。 require() 语句包括并运行指定文件。有关包括如何工作的详细信息见 include() 的文档。 require() 和 include() 除了...2016-11-25- include:这是今天的主题,我想没有什么比一个UI更说明问题了,那么这是一个什么页面呢?详见下面。...2021-09-22
- 在php中我们调用外部文件都会用到php include 与require 来包含进来了,但是否include 和require他们两有什么区别呢 服务器端include(小型工业)用于创建功能,页眉,...2016-11-25