国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

asp.net1.1 開發(fā)專用模板類

2019-11-18 17:15:24
字體:
供稿:網(wǎng)友

做web開發(fā)也有幾年了。自己在不同的公司有不同的認(rèn)識。最近做blog項(xiàng)目。自己認(rèn)識到了模板類在web開發(fā)中的作用。自己晚上在家。總想可以做一個專門的為asp.ne開發(fā)而設(shè)計的模板類。于是就寫了這個模板類。 
  
 下載地址點(diǎn)這   
 
 
把下載下來的 500sea.txt 文件改名為  Templet.rar 文件打開就可以
 
如果打開
http://img.club.163.com/images/user/other/500sea
沒有提示 500sea.txt文件下載。那就用網(wǎng)絡(luò)快車等東西下這個地址
把下來的500sea.txt文件 改為 *.rar 文件就好

 
      下面是里面的一個說明文件
 
//---------------------------------------------------------------------------------------------------------------------------//
 

介紹:
 此模板類是為三層架構(gòu)web站點(diǎn)開發(fā)而編寫的。StringTempletReplet.dll組件
 內(nèi)包含模板類。StringTempletReplet命名空間內(nèi)的模板類可以使用在UI層,也可
 以使用在邏輯層。
*****************************************************************************
運(yùn)行方法:
 建立一個名叫 Templet 的虛擬目錄指象解壓后的 Templet 文件夾
 運(yùn)行內(nèi)部的 RetuenString.aspx,ReturnText.aspx,WriteArticon.aspx,
 LongLoop.aspx 頁面。在頁面對應(yīng)的cs文件上有相應(yīng)說明。
 第一次打開頁面應(yīng)為要保留委托對象和模板文件到緩存中,所以真正的速度要看第
 一次以后的。
*****************************************************************************
原理介紹:
 一種標(biāo)簽替換的模板。使用了c#中的指針運(yùn)算查找標(biāo)簽位置。
 用委托對象指象標(biāo)簽對應(yīng)的解析函數(shù),并用靜態(tài)對象緩存全部委托對象。
 在不改變模板正文的情況下,緩存全部模板內(nèi)容。可以動態(tài)更換模板。
****************************************************************************
標(biāo)簽介紹:
 在成對特殊符號{$ 和 $} 之間的內(nèi)容為標(biāo)簽
 如
 {$標(biāo)簽名:參數(shù)1:參數(shù)2:參數(shù)3::字符10$}
 {$標(biāo)簽名:參數(shù)1:參數(shù)2::字節(jié)10$}
 {$dt[5][name]$}
 在標(biāo)簽內(nèi)部通過 :: 符號把標(biāo)簽分為 (標(biāo)簽參數(shù)部分) 和 (命令控制部分) 兩快
 {$標(biāo)簽名:參數(shù)1:參數(shù)2:參數(shù)3::字節(jié)10$}
  (標(biāo)簽參數(shù)部分)        :: (命令控制部分)
 在這兩部分內(nèi)以:號分割標(biāo)簽參數(shù)部分和命令控制部分
 標(biāo)簽參數(shù)部分 ---第一個為標(biāo)簽名,就是標(biāo)簽解析函數(shù)的對應(yīng)名稱,以后的為函數(shù)的參數(shù),
     標(biāo)簽解析函數(shù)接受全部參數(shù)類型為string類型的,參數(shù)個數(shù)為0--20個的
     函數(shù),返回類型為string類型。參數(shù)可在標(biāo)簽上寫死,也可以動態(tài)寫入。
                 
 命令控制部分 ---現(xiàn)在只有兩個命令符號 字符 和 字節(jié) ,后帶一個數(shù)字參數(shù),表示截取標(biāo)
           簽解析結(jié)果的長度, 如 字符10  字節(jié)10 。
                   
           我以后會在擴(kuò)展其他的命令控制符號。
         
 標(biāo)簽和函數(shù)對應(yīng)請看Business.cs 文件內(nèi)說明
 標(biāo)簽具體使用規(guī)則請看Templet/templet/aa1.htm 模板內(nèi)說明
 具體調(diào)用規(guī)則請看項(xiàng)目中的這三個aspx頁面
 WriteArticon.aspx  -- 讀模板 解析 寫入文件 用于產(chǎn)生靜態(tài)頁面的新聞系統(tǒng)
 ReturnText.aspx      -- 讀模板 解析 返回字符串 用與寫經(jīng)常要改變外觀的頁面,
                                               換皮膚的頁面。可動態(tài)更換模板 。
 RetuenString.aspx -- 接受標(biāo)簽字符串,返回解析結(jié)果。常用與Ajax。 
******************************************************************************
 
標(biāo)簽動態(tài)取值:
 標(biāo)簽解析函數(shù)除可以接受標(biāo)簽內(nèi)傳來的固定參數(shù)外。可以有三種方式接受動態(tài)參數(shù)
 象模板類傳遞  Datatable  和  Hashtable 對象以后
 (Datatable 從數(shù)據(jù)層獲取 ,Hashtable 一般是頁面變量 和其他變量)
 1。  dt[5][name]   ----  表示取Datatable內(nèi)5行name列上的數(shù)值,第一個為數(shù)字,
                                      第二個是列名
 2。  dt[name]      ----  在loop循環(huán)外表示取Datatable內(nèi)0行name列上的數(shù)值,
                                      一個參數(shù)表示列名
                        
                                ----  在loop循環(huán)內(nèi)表示取Datatable內(nèi)name列上的數(shù)值,取那
                                        些行通過loop標(biāo)簽的參數(shù)決定
 3。  page[PageId]  ----- 表示取Hashtable對象內(nèi)PageId鍵上的數(shù)值,返回string類型
    如 {$二個參數(shù)書簽:dt[3][Word]:page[UserId]::字符10$}

    {$dt[5][name]$}   {$dt[name]$}   {$page[PageId]$}
   
    或  
   
    {$dt[5][name]::字符10$} {$dt[name]::字符10$}  {$page[PageId]::字符10$}   
   
    這樣的標(biāo)簽表示直接在頁面上顯示對象內(nèi)的數(shù)值
****************************************************************************
頁面或類內(nèi)調(diào)用模板類方法:
 可在頁面或類內(nèi)調(diào)用
 
 產(chǎn)生對象,關(guān)聯(lián)對應(yīng)標(biāo)簽函數(shù)解析類


//在這里我門只要在這一行后面 new Business() 一個Business類對象就可以了
    //用接口實(shí)現(xiàn)多態(tài),代碼看起來有點(diǎn)麻煩。  自己用的時候只要修改最后一個"new Business()" 為自己的包含標(biāo)簽解析函數(shù)的類就可以了
    ILabelAnalyStart objILabel=(ILabelAnalyStart) new TempletReplet(new Business());   

    //讀模板路徑屬性
    objILabel.ReadFilePath=this.Server.MapPath("templet/aa1.htm");

    //寫文件路徑屬性
    objILabel.WritFilePath=this.Server.MapPath("page/aa1.html");

    //獲取數(shù)據(jù)表對象
    objILabel.LabelDatatable=ds.Tables[0];

    //把這個頁面上的變量用Hashtable對象傳近模板類
    objILabel.LabelHashtable=ht;

    然后可以實(shí)現(xiàn)三種替換
    //開始替換寫模板
    objILabel.LaberReplet();
    //返回解析結(jié)果
    string aa=objILabel.LaberRepletText();
    //返回解析結(jié)果,這個是直接接受模板字符串的,具體看RetuenString.cs文件
    string aa=objILabel.LaberRepletString();

 詳細(xì)可看這三個文件的cs文件
 WriteArticon.aspx  -- 讀模板 解析 寫入文件 用于產(chǎn)生靜態(tài)頁面的新聞系統(tǒng)
 ReturnText.aspx    -- 讀模板 解析 返回字符串 用與寫經(jīng)常要改變外觀的頁面
                         換皮膚的頁面
 RetuenString.aspx -- 接受標(biāo)簽字符串 返回解析結(jié)果。常用與ajax 

****************************************************************************
標(biāo)簽函數(shù)關(guān)聯(lián):   
    具體詳細(xì)請看 Business.cs 文件
   
 在邏輯層對應(yīng)的類的靜態(tài)構(gòu)造器內(nèi),加如下代碼。
 
//調(diào)用靜態(tài)構(gòu)造器,把標(biāo)簽執(zhí)行函數(shù)委托放到靜態(tài)哈希表內(nèi)
        //必須執(zhí)行這個方法
        static Business()
        {
            Business _this=new Business();

            FunctionList.objFunctionHashtable.Add("無參書簽",new KeyItemDelegate(new UserDelegate.Run_0(_this.show),0));

            FunctionList.objFunctionHashtable.Add("一個參數(shù)書簽",new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
           
            FunctionList.objFunctionHashtable.Add("二個參數(shù)書簽",new KeyItemDelegate(new UserDelegate.Run_2(_this.tag_two),2));


            //書簽和執(zhí)行函數(shù)關(guān)聯(lián)。放到書簽解析類的靜態(tài)構(gòu)造函數(shù)內(nèi)。是為了可以完全使用內(nèi)存中的對象,不每次都執(zhí)行 
            // "一個參數(shù)書簽"   字符對應(yīng)  public string tag(string aa) 函數(shù)  對應(yīng)模式為在哈希表上加key和value
            //    ("一個參數(shù)書簽",new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
            //      標(biāo)簽名                                              |         |   |
            //                                      一個參數(shù)就用Run_1委托。       |   |
            //                                                     對應(yīng)的標(biāo)簽執(zhí)行函數(shù) |
            //                                                       一個參數(shù)就寫數(shù)字一  
   
            // 0 個或多個上面有對應(yīng)例子
        }   


 具體詳細(xì)請看 Business.cs 文件

*****************************************************************************
標(biāo)簽內(nèi)loop循環(huán)介紹:
 標(biāo)簽內(nèi)通過一些特殊符號,可以實(shí)現(xiàn)非嵌套loop循環(huán)


    //------------------------------------------------------------------------
 {$loop(3,0,alter)$}       //顯示三行,從0行開始,如果有交替列,運(yùn)行交替列
  {$BlockItem$}         //默認(rèn)的循環(huán)行,
 
   <td bgcolor="#33ccff">標(biāo)題:{$dt[5][name]$} , 作者:{$一個參數(shù):dt[dddf]$}</td>
 
  {$/BlockItem$}
 
 
  {$BlockAlterItem$}    // 交替循環(huán)行  當(dāng)沒有默認(rèn)行標(biāo)簽對,有交替循標(biāo)簽對。就把交替循標(biāo)簽對當(dāng)默認(rèn)行標(biāo)簽對
 
   <td bgcolor="#ff6699">標(biāo)題:{$dt[5][name]$} , 作者:{$一個參數(shù):dt[dddf]$}</td>
 
  {$/BlockAlterItem$}
 
 
  {$BlockPatch$}       //當(dāng)要循環(huán)的行數(shù)大于Datatable內(nèi)的行數(shù)時,用這里的內(nèi)容補(bǔ)充顯示  。 如果沒有 “補(bǔ)充” 標(biāo)簽對。那么當(dāng)顯示行數(shù)大于Datatable中的行數(shù)時,將只顯示Datatable中的行數(shù)
 
   <td bgcolor="#33ccff">補(bǔ)充(里面也可以使用標(biāo)簽)</td>
 
  {$/BlockPatch$}
 
 
  {$BlockAlterPatch$}    //沒有補(bǔ)充標(biāo)簽對,有交替補(bǔ)充標(biāo)簽對。就把交替補(bǔ)充標(biāo)簽對當(dāng)補(bǔ)充標(biāo)簽對
 
   <td bgcolor="#ff6699">交替補(bǔ)充(里面也可以使用標(biāo)簽)</td>
 
  {$/BlockAlterPatch$}
 
 {$/loop$}                  //循環(huán)結(jié)束
 //--------------------------------------------------------------
 
 {$BlockItem$}  {$/BlockItem$}   :默認(rèn)的循環(huán)行標(biāo)簽對
 {$BlockAlterItem$} {$/BlockAlterItem$} :交替循環(huán)行標(biāo)簽對
 {$BlockPatch$} {$/BlockPatch$}  :默認(rèn)補(bǔ)充行標(biāo)簽對
 {$BlockAlterPatch$} {$/BlockAlterPatch$} :交替補(bǔ)充行標(biāo)簽對

 //------------------------------------------------------
 
 如果只有默認(rèn)的循環(huán)行可以不加{$BlockItem$}標(biāo)簽對
 如
 {$loop(3,0,alter)$}
  <tr><td>{$函數(shù)標(biāo)簽$}</td></tr>   
 {$/loop$}
 和
 {$loop(3,0,alter)$}
  {$BlockItem$}<tr><td>{$函數(shù)標(biāo)簽$}</td></tr>{$/BlockItem$}   
 {$/loop$}
 是表示一樣的效果
 
 
 //-------------------------------------------------------------
 
 
 {$loop(3,0,alter)$}
  {$BlockAlterPatch$}
      <tr><td>{$函數(shù)標(biāo)簽$}</td></tr>
  {$/BlockAlterPatch$}   
 {$/loop$}
 如果只有交替循環(huán)行標(biāo)簽對沒有默認(rèn)的循環(huán)行標(biāo)簽對那么交替循環(huán)行標(biāo)簽對將自動轉(zhuǎn)換為
 默認(rèn)循環(huán)行標(biāo)簽對
 
 
 //--------------------------------------------------------------
 
 {$loop(3,0,alter)$}
  {$BlockAlterPatch$}
      <tr><td>{$函數(shù)標(biāo)簽$}</td></tr>
  {$/BlockAlterPatch$}   
 {$/loop$}
 如果只有交替補(bǔ)充行標(biāo)簽對沒有默認(rèn)補(bǔ)充行標(biāo)簽對那么交替補(bǔ)充行標(biāo)簽對將自動轉(zhuǎn)換為
 默認(rèn)循環(huán)行標(biāo)簽對
 
 
 
**************************************************************************

loop參數(shù)說明:
 {$loop(3,0,alter)$}   
 loop上一共有三個參數(shù),可適當(dāng)減少
 第一個參數(shù):
 3:循環(huán)3次 ,沒有表示循環(huán)全部
 第二個參數(shù):
 2:從2開始,沒有表示從0開始
 第三個參數(shù):
 alter:交替
 noalter:不交替   ,沒有表示默認(rèn)為交替,所以alter加不加是一樣的
 如果三個參數(shù)全不寫,至少要保留一對空括號  {$loop()$}
 表示循環(huán)Datatable內(nèi)的行數(shù)
 從0行開始,有補(bǔ)充就顯示補(bǔ)充。
*************************************************************************
 
有更新了一下。主要是優(yōu)化循環(huán)。
現(xiàn)在循環(huán)5萬行的表格要 300-400 毫秒。

 
***************************************************************************
建議模板不要大于85k,小心成為大尺寸對象。那可是二代對象
建議頁面模板小于等于919個,對應(yīng)函數(shù)標(biāo)簽建議不超過1597個。
很高興看見模板類和我自己的認(rèn)識一起成長。
 
*****************************************************************************


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 晋城| 新泰市| 宁国市| 黑龙江省| 铁岭县| 平潭县| 商河县| 漳浦县| 天水市| 息烽县| 广宗县| 项城市| 三台县| 黄平县| 青龙| 安塞县| 彭阳县| 贵定县| 临澧县| 渝中区| 兴化市| 鄂托克旗| 罗甸县| 杭锦旗| 马尔康县| 平江县| 乐安县| 平远县| 富平县| 定结县| 夏邑县| 石门县| 普陀区| 故城县| 孟连| 衡东县| 民勤县| 延长县| 临潭县| 黄浦区| 泾川县|