在使用Asp.Net进行Web开发时我一直都很注重最终生成的HTML是否干净,所以我会使用Repeater取代GridView等控件,可控性好而且生成的HTML代码也非常干净。干净的HTML有很多好处,如代码相应较少加载速度快,便于控制页面元素等。在AspNet4中对HTML的净化做了很大的改进,下面的文字中会做一个简单的介绍。

设置controlRenderingCompatibilityVersion

controlRenderingCompatibilityVersion需要在Webconfig文件中设置,配置在Pages节点中,可以设置使用3.5还是4.0的引擎来渲染HTML,默认是使用4.0。
在VS2010中创建一个AspNet项目,在项目中的site.master中会有一个Menu控件来显示导航,代码如下:
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu"
EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"><Items><asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/><asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/></Items>
</asp:Menu>

分别设置 controlRenderingCompatibilityVersion属性值为3.5和4.0,运行项目,看到页面源码的区别如下:
4.0
3.5
可以看出使用4.0的引擎是将Menu控件生成的Ul 标签,而3.5中是生成的table,代码的复杂度明显大了很多。当然并不只是对Menu控件进行了优化,还有其他一些方面如:
  • 一些控件的内置样式被去掉,而是在页面中生成样式代码
  • 模板控件中移除了外表表格渲染
  • 向导类控件使用站位符控制层

使用ClientIDMode

在继承了masterpage页的页面中添加其他的服务器控件,最终呈现的HTML的的ID都会改变,如下:
AspNet4中可以使用ClientIDMode来改变这一局面,ClientIDMode在页面的Page指令中设置,如下:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="test.aspx.cs" Inherits="UrlRewriterDemo.test" ClientIDMode="Static" %>

将ClientIDMode设置为Static后,刷新页面查看源代码,控件的ID变成本来面目了,如下:
ClientIDMode有四个属性值:AutoID、Inherit、Predictable和Static,下面以上面的按钮为例,列出分别在这四种属性值下呈现的ID值:
  • AutoID:ctl00_MainContent_btnTest
  • Inherit:MainContent_btnTest
  • Predictable:MainContent_btnTest
  • Static:btnTest

对ViewState更细致化的管理

ViewState是让人又爱又恨的东西,控制不好会使页面变得非常庞大,在AspNet4中可以使用ViewStateMode对ViewState进行更细致化的管理。ViewStateMode可以在页面级设置也可以在控件级设置,有三个属性值:
  • Inherit:从父控件中继承;
  • Enabled:当父控件的ViewState处于Disabled状态时可以设置当前控件ViewState可用;
  • Disabled:当父控件的ViewState处于Enalbed状态时可以设置当前控件ViewState禁用
在以前的AspNet版本中有个EnableViewState属性可以来设置ViewState,不过ViewStateMode和EnableViewState还是有很大区别的:
EnableViewState
  • 其值为布尔类型,决定其控件或是子控件是否开启ViewState;
  • 优先级别大于ViewStateMode,只要 EnableViewState设置为false,就算设置了ViewStateMode为Enabled,控件的ViewState还是关闭的;
  • 当设置父控件的EnableViewState为false后,其子控件的ViewState就都关闭了,不能在子控件中单独开启ViewState。
ViewStateMode
  • 在父控件以及本身的EnableViewState设置为true时,才会起作用;
  • 子控件不受父控件ViewStateMode的影响;
  • 在父控件中设置ViewStateMode为Disabled后,可以在子控件中设置ViewStateMode为Enabled来开启子控件的ViewState。

转载于:https://blog.51cto.com/oec2003/1050363

Net4.0---对HTML净化的处理相关推荐

  1. .NET4.0并行计算技术基础(8)

    说明: 要想看懂本系列文章,需要您对.NET多线程开发有基本的了解.我在新书<面向对象的艺术 --.NET Framework 4.0技术剖析与应用>(暂名)中花了近200页的篇幅来介绍. ...

  2. IIRF重写在asp.net4.0+IIS6中部分失败的解决方案

    最近公司里一个项目,使用的是 asp.net4.0.iis6 .iirf重写 以前iis7 和本地搭建都没有问题 ,到服务器上就一直404 看了日志发现后缀总会跟着"/eurl.axd/GU ...

  3. 《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-13 ClientBuilderManager类别的编译功能...

    本节书摘来自异步社区<圣殿祭司的ASP.NET4.0专家技术手册>一书中的第1章,第13节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区"异步社区" ...

  4. Win2008上.NET4.0部署出错HTTP 错误 500.21 - Internal Server Error的解决方法

    Win2008上.NET4.0部署出错HTTP 错误 500.21 - Internal Server Error的解决方法 参考文章: (1)Win2008上.NET4.0部署出错HTTP 错误 5 ...

  5. ASP.NET4.0中客户端ID的生成

    从去年某个时候,我开始探索ASP.NET4.0 Web窗体的改进.我发现ASP.NET4.0中一些令人兴奋地改进,我确认这一切都会使WEB开发更简单并为我们提供更多灵活性.因此我逐个摘选了这些 很令人 ...

  6. NET4.0.X中的状态机工作流

    NET4.0.X中的状态机工作流 今天整理文档时发现了这篇忘记发布的文章,是关于NET 4.0.1的, NET 4.0.2都已发布一段时间了 以下NET版本提供WF4.0的状态机工作流在VS2010中 ...

  7. ASP.NET4.0新的%: %语法用于HTML Encoding

    从ScottGu大神那里看到的,ASP.NET4.0启用新的<%: %>语法用于HTML编码.Html Encoding的一般用于防止跨站攻击(XSS),详情可以参考我之前写过的一篇文章: ...

  8. ASP.NET报错集合一----.net4.0创建项目后,在iis上部署项目,无法浏览,提示404

    前言:这些错误纯属自己在开发项目的时候遇到的问题,比较有针对性.如果有解决不了的问题,请勿喷. 问题描述: .net4.0创建项目后,在iis上部署项目,无法浏览,提示404 搭建项目的环境: 项目是 ...

  9. .NET4.0 之 Dynamic VS Refle“.NET研究”ction 效率

    在我先前的文章中,不断的推广.NET4.0新特性.特别是.NET4.0 Dynamic 这个新特性.随之而来的问题也出现了-Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能 ...

  10. 一起谈.NET技术,.NET4.0 之 Dynamic VS Reflection 效率

    在我先前的文章中,不断的推广.NET4.0新特性.特别是.NET4.0 Dynamic 这个新特性.随之而来的问题也出现了-Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能 ...

最新文章

  1. SpringBoot 之 普通类获取Spring容器中的bean
  2. memsql 落地mysql_MemSQL初体验 - (2)初始化测试环境
  3. [Python陷阱]os.system调用shell脚本获取返回值
  4. 在程序员面前千万不要说这9句话,我一个同事就死的很惨!
  5. 小程序功能模块-飞鱼知识变现小程序2.5.3源码
  6. 博文视点大讲堂第33期——如何让你既能干得漂亮又说得清楚?
  7. C++ 构造函数中抛出异常
  8. input accept属性控制选择文件类型
  9. C++ std::map 和 std::unordered_map 区别 时间复杂度 适用
  10. 编程珠玑第三章笔记加习题解答
  11. vue+lodop打印快递面单
  12. Ubuntu20.04使用FreeRADIUS搭建EAP认证环境
  13. ReactNative基础(六)使用react-navigation实现页面导航布局效果(TabNavigator)
  14. python生成文章标题_标题党文章生成器
  15. C# Unsafe code may only appear if compiling with /unsafe
  16. php artisan migrate,关于laravel 5.1下php artisan migrate的使用
  17. p2.第一章 Python基础入门 -- 冯诺依曼体系和计算机基础 (二)
  18. spotify电脑下载歌曲_26步,把Spotify音乐集成进SAP
  19. MyBatis自定义自定义动态SQL解析方式
  20. CSS高手布局:让footer完美处于网页下方

热门文章

  1. 组织管理插件-代码自动补全-语法检查等特性-SpaceVim v1.5.0
  2. 移动项目开发笔记(管理不同解决方案下的DLL文件相互引用之心得体会)
  3. jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
  4. MongoDB 教程番外篇之管理工具: Rockmongo
  5. 使用 jQuery Mobile 与 HTML5 开发 Web App (八) —— jQuery Mobile 工具栏
  6. 使用Tool Bar切换视图
  7. Javascript中暂停功能的实现
  8. PclZip:强大的PHP压缩与解压缩zip类
  9. valotitle 轻量级 同步机制
  10. Java 8都出那么久了,Stream API了解下?