zoukankan      html  css  js  c++  java
  • Net4.0对HTML净化的处理

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

    设置controlRenderingCompatibilityVersion

    controlRenderingCompatibilityVersion需要在Webconfig文件中设置,配置在Pages节点中,可以设置使用3.5还是4.0的引擎来渲染HTML,默认是使用4.0。

    2010-07-28_143021

    在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

    2010-07-28_150119

    3.5

    2010-07-28_150528 

    可以看出使用4.0的引擎是将Menu控件生成的Ul 标签,而3.5中是生成的table,代码的复杂度明显大了很多。当然并不只是对Menu控件进行了优化,还有其他一些方面如:

    1 一些控件的内置样式被去掉,而是在页面中生成样式代码;

    2 模板控件中移除了外表表格渲染;

    3 向导类控件使用站位符控制层。 

    使用ClientIDMode

    在继承了masterpage页的页面中添加其他的服务器控件,最终呈现的HTML的的ID都会改变,如下:

    2010-07-28_152923

    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变成本来面目了,如下:

    2010-07-28_154000

    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

    1 其值为布尔类型,决定其控件或是子控件是否开启ViewState;

    2 优先级别大于ViewStateMode,只要 EnableViewState设置为false,就算设置了ViewStateMode为Enabled,控件的ViewState还是关闭的;

    3 当设置父控件的EnableViewState为false后,其子控件的ViewState就都关闭了,不能在子控件中单独开启ViewState。

    ViewStateMode

    1 在父控件以及本身的EnableViewState设置为true时,才会起作用;

    2 子控件不受父控件ViewStateMode的影响;

    3 在父控件中设置ViewStateMode为Disabled后,可以在子控件中设置ViewStateMode为Enabled来开启子控件的ViewState。

  • 相关阅读:
    翻转单词顺序
    java layout 表格项增加、删除、修改
    Hadoop学习之HBase
    protected的一些功能
    hdu4431 Mahjong
    kendo ui gird温馨提示(使用本地数据) 一个
    TOP计划猿10最佳实践文章
    Java高级应用(一个)-文件夹监控服务
    BSD介绍
    获取编译学习笔记 (十三)—— 外部中断
  • 原文地址:https://www.cnblogs.com/oec2003/p/1787145.html
Copyright © 2011-2022 走看看