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

首頁 > 編程 > .NET > 正文

用.Net實現基于CSS的AJAX開發(1)

2024-07-10 13:12:45
字體:
來源:轉載
供稿:網友

前面我介紹了我做的.net版的ajax庫(.net下的簡單ajax處理庫 ),現在要介紹的是一種開發模式:樣式綁定式驅動開發。
   樣式驅動是我自己命名的,(我也不知道它叫什么,嘿嘿)以便區別目前的請求驅動式開發(如struts、webwork等)和事件驅動式開發(如asp.net、jsf等)。
  正文:
  1 簡介
   首先,讓我們來看看傳統的流程:
   ·請求驅動: 最常見的一類web框架實現了以請求驅動的流程。一個http請求近來,被一個通用的分發器servlet
  (dispather servlet)分析,再被分發到一個對應的應用處理器。處理器依次處理ui特有的控制邏輯,調用業務對象和處理會
  話狀態,準備一個模型,再轉發到視圖。
   ·事件驅動: 事件驅動框架的設計目標是將桌面ui編程中著名的事件驅動模式搬到web環境中來。其特征是;對于如何將
  表單提交到url、如何將url映射到控制器這些問題它們不關心;在事件驅動的框架中,表單組件和監聽器聯系在一起,監聽器
  通過事件開調用。而且,這類框架通常不打算實現可插拔的試圖技術來呈現給特定的模型對象,而是把web頁看作一寫列界面組
  件的組合物,每個組件可以保持自己的狀態,并且知道如何呈現自己,甚至可能使用不同界面皮膚。
   從上面可以看到一個是傳統的mvc架構是開發,一個是以頁面為中心的快速應用開發(rad)兩者各有各的好處。
  
   樣式驅動式開發在請求驅動開發或事件驅動開發的基礎上進行簡單的封裝,在界面層融合了以上兩者概念優勢,它以最前臺
  的界面層為基礎,通過css樣式或htc事件綁定界面元素來執行相應后臺業務,從而達到執行相應請求,處理相應的事件的目的
  。
   樣式驅動的優勢在于只需把前臺元素賦予特定的樣式,即可實現特殊的動能以及特定的業務處理,從而減少編碼量和編譯的
  次數,具有“一次編寫,到處綁定”的特點。比傳統開發復用性更強。尤其是在ajax大行其道的今天,在請求驅動框架或事件
  驅動現有框架的基礎上利用樣式綁定式開發基于ajax的應用,你會發現你的ajax程序的開發效率會提高很多,尤其是當反復應
  用同一(或相似)后臺邏輯的情況會更明顯,同樣,樣式綁定式開發對于面向服務式開發也具有很大的優勢。
  
  2 基于asp.net的樣式驅動開發
  
   樣式驅動的操作不依賴與后臺實現,asp.net的runat=server可以魔法搬地將前臺元素轉化為后臺的元素,不過這樣的轉化
  依賴于特定的元素和后臺,比如<input type=text runat=server> 這樣確實是將input元素擴展成后臺可以使用的服務器元素
  了,但是對于后臺來講他要在頁面對應的里進行特定的處理,而且input type=text只能是input type=text也不可能擴展自己
  的功能。樣式驅動則可以把一切元素、控件或控件中的元素利用js的強大功能在前臺轉換為你想要的功能和效果,然后再送入
  原請求或自定義請求,從而彌補asp.net的一些不足,“一次編寫,到處綁定”的特點也為我們省去了多個頁面類寫重復代碼的
  諸多困擾。
  
   也許你會說不是有用戶控件嗎,很抱歉,用戶控件跟前臺嚴重耦合,你將它拿到一個項目中也許派不上一點用場。
  
   那web控件庫呢?雖然能重用,跟用戶控件比不耦合了,但是局限性太強,復雜度高,我覺得叫一個普通程序員寫一個帶模
  板項的datagird能排序的,可以刪除、修改、上移下移]可以查看詳細信息的控件出來是一件很費事的事。
  
   又有人說了,真笨,我直接拖一個datagrid然后再這個基礎上加按紐,模板列,排序,詳細連接好不好啊,還用特意做個
  控件嗎?有很抱歉的告訴你,如果是1000個datagird,每一個都有這些功能的一種或幾種,那么你后臺夠寫的了,即使你抽象
  出一層、封裝出一個專門的datagirdbuilder類,也夠復雜的,各種重載方法,暈。
  
   那么使用樣式綁定式的開發就簡單了,給datagird個排序的樣式(比如cssclass=sort),后臺幾句代碼,或者干脆不寫(
  你的準備比較充足),就可以了,再加個列變為刪除按鈕(比如其中的一個列里itemstyle cssclass="delbtn"),就可以了,
  別的datagrid不需要排序,那么樣式去掉。而后頁面類里干干靜靜。樣式綁定后變化的元素傳值到統一的業務對象進行處理,
  一切都很規矩。
  
  3 實現
   利用我之前做過的ajax庫,再結合javascript腳本構建一個這樣的庫不成問題。自然,跟做燒飯做菜一樣,這里選料非常的
  重要,這里我要選用來自dean edwards和tino zijdel的事件操作腳本庫(common.js)和neil cro~~~~y制作的樣式基本操作庫(
  css.js)來做好我們這道美味,噢,當然,還有大名鼎鼎的prototype.js庫.
  
  
   好了,,前臺的制作工序基本完成。
   然后就是利用我前一陣子做的ajax庫了。
   假設是刪除,querystring: command=delrow&js生成的參數……
   則后臺調用ajaxdelrow.cs
  
  protected override void doajax()
  ...{
   // 搜集參數
   string parlist = request.params["pars"];
   string[] paritem = parlist.split('|');
   hashtable hash = new hashtable(paritem.length);
   for(int i=0;i<paritem.length-1;i++)
   ...{
   string[] paritempart = paritem[i].split('^');
   hash.add(paritempart[0],paritempart[1]);
   }
  
   bool isdeled = false;
   string table = request.params["table"];
   // 判斷來源
   if(table!=null)
   ...{
   if(table.equals("dgbigclassmanage")) //datagrid的id號
   ...{
   // 調用對應業務外觀的dao來刪除
   // hash["0"]為datagrid的第0列,假設第0列傳過來是id值
   isdeled = (new businessfacade()).deletebyid(hash["0"].tostring());
   }
   if(isdeled)
   ...{
   output("true");
   }
   else
   ...{
   output("false");
   }
  }
  ajaxdelrow制作流程請參考.net下的簡單ajax處理庫

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 济南市| 大新县| 肥东县| 二连浩特市| 开原市| 福海县| 松溪县| 夏邑县| 巴青县| 嵩明县| 长阳| 英吉沙县| 哈巴河县| 康定县| 尼木县| 莱芜市| 阿拉善左旗| 郑州市| 三门县| 盘山县| 贞丰县| 长治市| 泾阳县| 璧山县| 绥德县| 桦川县| 当雄县| 志丹县| 姜堰市| 沾益县| 芒康县| 高陵县| 泸定县| 刚察县| 麟游县| 峡江县| 阳原县| 晋宁县| 马公市| 义马市| 建水县|