知识大全 WebForm页面内容输出的细节分析
Posted 内容
篇首语:我们这个世界,从不会给一个伤心的落伍者颁发奖牌。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 WebForm页面内容输出的细节分析相关的知识,希望对你有一定的参考价值。
WebForm页面内容输出的细节分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
老赵前日的这篇博文讲的是有关ASP NET WebForm页面内容输出方式的内容 尽管这个话题很老 不过在ASP NET MVC中同样适用 而且适用的情况有增无减 因此十分重要 希望这篇文章能够帮助你更好的理解ASP NET WebForm页面内容输出的细节
这次我们谈的话题是 WebForm页面上输出内容的方式 这其实是一个非常旧的话题了 因为本文的内容甚至可以运用于ASP NET 之上 不过这个话题的适用范围很广 因为即使是目前最新的ASP NET MVC框架 它的默认视图引擎依旧是基于ASP NET WebForm的(如Page Control MasterPage) 甚至说 由于ASP NET MVC框架的特性 我们会遇到更多在页面上 直接输出 内容的情况 因此 这个话题在ASP NET MVC应用中可能由为重要
那么就拿ASP NET MVC举例吧 假如 我们在页面上生成一个Partial View 我们可以这么做
< % Html RenderPartial( MyPartialView ); %> 然而 在前一篇文章中我们提出了一个新的方法Partial 它返回一个字符串 它可以在页面上这样使用
< %= Html Partial( MyPartialView ) %> 一个aspx页面会被编译成Page类的一个子类 这个子类的主要 功能 是覆蓋了基类的Render方法
public class MyPage : Page
protected override void Render(HtmlTextWriter writer)
我们平时在aspx页面中编写的大量内容 其实都会变成操作writer的代码 例如使用writer Write方法输出内容 或者把writer交给子控件的Render方法用于生成内容 那么 以上两种页面上的标记分别又是如何操作writer的呢?
< %= expression %> 首先是< %= %>标记 < %= %>标记内包含的是一个 表达式 因此它不能以分号结尾 表达式内部的数据就会直接写入writer 例如这样的标记
< %= DateTime Now %> 在编译过后就成为
writer Write(DateTime Now) 与< %= %>标记不同 < % %>标记中间其实包含的是 语句 语句自然可以有多行 自然每行最后需要有分号 这就像我们平时写C#代码那样 不过实际上 语句的功能其实并不是为了 输出内容 而是用来 控制逻辑 例如 您在页面上写了这样的代码
< % Func< int bool> odd = i => i % != ; %> 这样就相当于您在Render方法内部声明了一个局部变量odd 它的类型是一个Func< int bool>委托 而如果您编写这样的代码
< % for (int i = ; i < ; i++)
%> < span> < %= i + %> < /span> < %
%>
则生成的Render方法中就会包含
for (int i = ; i < ; i++)
writer Write( < span> );
writer Write(i + );
writer Write( < /span> );
如果是写在页面上的普通HTML标记 编译后就被当作普通字符串来处理了 有些朋友一直谈 客户端控件 等等 其实如果一个元素上没有runat= server 标记 ASP NET只是把它们当作普通字符串处理 并不会有任何 HTML元素 的概念 当然 上面的代码表现的是 意图 事实上在编译过后aspx页面中的空格和换行等字符也会包含在输出的内容中
那么 既然< % %>中包含的是用来控制逻辑的语句 本身不是用来表示输出的 那么为什么刚才代码中的Html RenderPartial方法也会生成页面内容呢?那是因为RenderPartial方法直接向当前HttpContext Response Output里写入字符了 很多朋友经常使用Response Write来输出内容 其实在Write方法内部就是输出到Output中
事实上 即使我们的页面中使用了HtmlTextWriter来输出内容 但它内部也是封装了Output所暴露出的TextWriter中 为了验证 您可以在代码中设置断点并观察Render方法的writer参数 在 正常情况下 可以发现writer InnerWriter属性是一个HttpWriter对象 这是个TextWriter的子类 也是ASP NET中定义的内部类型
这便是ASP NET WebForm页面内容输出的细节 那么请问 以下两种输出方式的区别是什么呢?
cha138/Article/program/net/201311/13683相关参考
ASP.NET中如何对页面输出缓存 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz
将Asp.net页面输出为HTML 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c#代码:
ASP.NET项目开发指南:页面级输出缓存 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
怎样把SQL中的数据输出到HTML页面[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们
怎样把SQL中的数据输出到HTML页面[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在查
怎样把SQL中的数据输出到HTML页面[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!<
图片上传的WebForm(自动生成所略图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 因自己
最简单的缓存机制把整个Aspx页面保存在服务器端内存中用户请求页面时直接从服务器端内存中提取数数据不在经历页面的生命周期主要用于不经常更新和修改而在第一次编译是时要经过大量处理的数据页面输出缓存是
Asp.Net页面执行流程分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在我的上一篇文章中
这篇文章介绍了net输出重写压缩页面文件的小例子有需要的朋友可以参考一下 不知你是否留意过有一些网站的代码都是混在一起没有任何空格和换行等多余字符它的好处不用多说——界面大小绝对优化或许