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 加強  
相關文章
相關標籤/搜索