Dot Net FrameWork 4.0 学习笔记(2)

   这两天太忙了,没有时间继续更新这学习笔记了,每天都要熬到10点钟才下班,现在我已经就在打哈欠了...还是赶紧写完眯觉觉吧...  Dot Net FrameWork 4.0 学习笔记(2) - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝     
    
    这一章照旧就是webform的更新变化来说的,,废话不说,,let's go

    1,在webform中做url路由
    2,通过实现自定义的CacheProvider,来实现自定义的页面缓存逻辑
    3,新增的表达式<%: expression %>相当于<%= HttpUtility.HtmlEncode(expression) %>
    4,控件QueryExtender,对数据源控件获得的数据做再检索
    5.其他新特性一览

    

    1,在mvc中我们采用routing的方式为我们的控制器与视图之间搭载了沟通桥梁,在webform中我们亦然可以如此来做

    在webform中使用routing步骤如下:
    (1) 在Global.asax的Application_Start方法中注册routeTable信息

    RouteTable.Routes.Add("myRoute", new Route("{userName}/{age}",new PageRouteHandler("~/Default.aspx")));


    (2) 在machine.config中注册routing类的信息

    <system.web>
    <!--httpModules注册拦截类-->
    <httpModules>
      <add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule" />
    </httpModules>
    <compilation debug="true" targetFramework="4.0">
      <expressionBuilders>
        <!--路由匹配验证类,是为了检查以下应用时的参数是否匹配问题啦-->
        <add expressionPrefix=" RouteValue " type="System.Web.Compilation.RouteValueExpressionBuilder" />
        <add expressionPrefix=" RouteUrl " type="System.Web.Compilation.RouteUrlExpressionBuilder"/>
      </expressionBuilders>
    </compilation>
  </system.web>


  (3) 后台取值应用route信息
    if (RouteData.Values["userName"] != null)
    {
            // 获取 url 路由而来的数据  配合以下逻辑的路由规则是:"{userName}/{age}"
            Response.Write("userName: " + RouteData.Values["userName"].ToString());
            Response.Write("<br />");
            Response.Write("age: " + RouteData.Values["age"].ToString());
            Response.Write("<br />");
    }
   当然前台也是可以获取的
   <asp:Label ID="lbl" runat="server" Text="<%$  RouteValue :userName %>"></asp:Label>

     Dot Net FrameWork 4.0 学习笔记(2) - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝



    如果面临以下的写法:

   <asp:HyperLink ID="hyl1" runat="server" NavigateUrl="<%$  RouteUrl :RouteName=myRoute,userName=zhangsan,age=30,sex=男,class=101班 %>">链接1</asp:HyperLink>

    则其他的参数信息就变成与配置路由参数只外的传值信息了,可以使用queryString来获取值了

     Dot Net FrameWork 4.0 学习笔记(2) - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝

     Dot Net FrameWork 4.0 学习笔记(2) - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝
 
    2.CacheProvider页面自定义缓存,在3.5时,我们可以做的页面缓存方式比较多,但都不够定制化,4.0中这一现象得到改善

    使用步骤如下:
    (1) 在web页面上填写输出缓存标记
    <%@ OutputCache Duration="30" VaryByParam="None" %>



    (2) 由于目前outputcache不支持providerName属性直接关联自定义缓存逻辑类,所以第二步我们必须在web.config的

<system.web>节点里注册我们的cacheproviderClass类
    <!--缓存配置-->
        <caching>
            <!--默认的缓存实现是 AspNetInternalProvider(即 asp.net 自带的基于内存的缓存实现方式)-->
            <outputCache defaultProvider="AspNetInternalProvider">
                <providers>
                    <!--新增一个缓存的 provider 配置-->
                    <add name=" ACache " type="WebApplication4_2.ACacheProvider, WebApplication4_2"/>
                    <add name=" BCache " type="WebApplication4_2.BCacheProvider, WebApplication4_2"/>

                </providers>
            </outputCache>
        </caching>


    (3) CacheProvider类中我们需要实现缓存逻辑,此类需要继承OutputCacheProvider并重写Add,Get,Remove,Set 略

    可以在这几个方法中实现你的缓存逻辑,,需要主要缓存内容为二进制形式,需要使用对应类型来保存反序列化后的结果



    (4) 在Global.asax中重写GetOutputCacheProviderName利用此方法的上下文(HttpContext)参数来判断我们业务中具
体需要什么缓存逻辑
    public override string GetOutputCacheProviderName(HttpContext context)
        {
            if (context.Request.Path.ToLower().EndsWith("acaching.aspx"))
            {
                return " ACache ";
            }
            else if (context.Request.Path.ToLower().EndsWith("bcaching.aspx"))
            {
                return  "BCache ";
            }
            else
            {
                return base.GetOutputCacheProviderName(context);
            }
        }
    这样我们的页面缓存就做好了,配合我们的缓存逻辑就可以做到自定义缓存了



    3,<%: expression %>表达式,用于防止页面的跨域脚本攻击,我们可以为html表单元素编码简便的写法

    <%--

        新增的一个表达式 <%: expression %> 相当于 <%= HttpUtility.HtmlEncode(expression) %>
    --%>


    <%= "<strong>strong</strong>" %>
    <br />
    <%: "<strong>strong</strong>" %>
    <br />
    <%= HttpUtility.HtmlEncode("<strong>strong</strong>") %>


     Dot Net FrameWork 4.0 学习笔记(2) - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝
    

    4,QueryExtender为数据源进行再次检索信息

    <!--
        QueryExtender - 和数据源控件结合使用,以对数据源控件中检索到的数据做再次检索
            SearchExpression - 根据指定的字段查找指定的数据
            RangeExpression - 在指定字段中查找指定范围的数据
            PropertyExpression - 查找某字段的值为某指定的值的数据
            OrderByExpression - 用于排序数据
            CustomExpression - 自定义查询表达式
    -->
    <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="LinqDataSource1">
        <asp:SearchExpression DataFields="ProductName" SearchType="EndsWith">
             <asp:Parameter Type="String" DefaultValue="0" />
        </asp:SearchExpression>
    </asp:QueryExtender>
    这样我们就可以在业务逻辑发生变化时,方便的改变数据源中的数据信息了,而可能不需要再次查询数据库



    5,其他特性

    (1) Permanent Redirect - 可以实现 301 跳转
            Response.RedirectPermanent() - 永久性重定向(http 301)    对搜索引擎友好性操作,也减免了不少安全隐患
            Response.Redirect() - 临时性重定向(http 302)


    (2) Session压缩(设置sessionState节点的compressionEnabled属性)
        对于使用进程外会话状态服务器的会话状态提供程序,或者将会话状态保存在 sqlserver 数据库中的会话状态提供程序,现在为提高其效率新增了压缩 Session 数据的功能(使用System.IO.Compression.GZipStream来压缩数据),像如下这样的配置
        <sessionState mode="SqlServer" sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate"
allowCustomSqlDatabase="true" compressionEnabled="true" />


    (3) httpRuntime节点的新增配置
        maxRequestPathLength - url 路径的最大长度(基于NTFS文件路径的最大长度就是 260)
        maxQueryStringLength - url 的最大长度
        requestPathInvalidChars - 指定 url 路径的无效字符
        requestValidationType - 继承 System.Web.Util.RequestValidator 抽象类,重写其IsValidRequestString()方法,以实现自定义的请求验证, 在requestValidationType 可以指定使用这个自定义的类
        encoderType 重写 System.Web.Util.HttpEncoder,可以实现自定义的 html编码,url编码,http header编码.
         在encoderType指定这个自定义编码的类后 ,程序中所用到的System.Web.HttpUtility或System.Web.HttpServerUtility的相关方法将会使用自定义的编码实现
        <httpRuntime maxRequestPathLength="260" maxQueryStringLength="2048" requestPathInvalidChars="&lt;,&gt;,*,%,&,:,\,?" requestValidationType="Samples. MyValidator ,Samples" encoderType="Samples. MyEncoder ,Samples" />


    (4) compilation节点新增targetFramework属性,用于指定程序运行的目标框架
        <compilation targetFramework="4.0" />


    (5) asp.net 4.0结合iis 7.5可使web应用程序自动启动
        在web程序中实现System.Web.Hosting.IProcessHostPreloadClient接口,用于被iis启动


    (6) Page类中新增了两个属性,分别是MetaDescription和MetaKeywords 这是增强seo的表现了


    (7) 以前每个可显示的控件都有 Enabled 属性(如果 Enabled="false" 则对应的HTML为disabled="disabled"),但是 HTML 4.01 的标准是只有 input 才能有 disabled 属性
        在pages节点中设置 controlRenderingCompatibilityVersion="3.5",则所有可显示控件都会输出 disabled="disabled"
        在pages节点中设置 controlRenderingCompatibilityVersion="4.0",则只有 input 元素才会输出 disabled="disabled",非 input 元素将会自动标记一个名为aspnetdisabled的css类


    (8) webform需要在页面上写入隐藏域(如为了保存 ViewState 的隐藏域),在4.0中系统将在这类的隐藏域外的div上标记一个名为aspNetHidden的css类,以方便样式控制




    4.0中关于webform的更新大概就在此处了,我们明显的感觉到了友好的氛围,无论是web标准,还是seo等等,都是与我们的体验用户分不开的.


    下一节: 动态数据(Dynamic Data)增强部分,AJAX 增强,Visual Studio 2010 增强

 


     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360551,如需转载请自行联系原作者




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值