亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET入門隨想之檢票的老太太

2020-01-18 01:53:59
字體:
來源:轉載
供稿:網友
  德國足協告誡那些可能前往德國觀看2006年世界杯賽的球迷要提防假票,不要從非代理商和票販子手中購票。世界杯門票都是高科技產品,門票被植入微芯片,只有通過合法途徑取得門票的球迷才能入場。假票現象在近些年的足球大賽上泛濫成災,德國足協希望能通過宣傳避免世界杯球迷成為其受害者。

   驗明正身 - 數據有效性

  世界杯萬人矚目但門票有限,所以有人造假有人買假,安聯球場的大門前站幾位檢票員必不可少,而我們的程序有時也一樣。當你接到一個累積數年的數據表時,發現單單聯系電話都有23種格式時,你是否也感嘆到,在用戶提交數據時系統也需要靠檢票員來驗證一下?可是我們還是發現象數據驗證這樣的內容往往容易被人忽視,許多系統常讓拿著公車票的家伙混進球場撒野,各種數據如同發情野馬一般長驅直入,先不說安全問題,從數據有效性的角度看,幾年后它會象霉菌一樣讓整個數據庫腐爛變質,垃圾成堆。不過常會有另一種聲音在耳旁響起:"搞那么復雜做什么呀,這個系統、甚至是這個企業沒等霉菌開始起作用,它就掛了!"

  應用程序必須確保系統的數據有效性有二層含義:一是格式驗證,要確保數據屬于系統設計時定義的類型、范圍,甚至是行業的特定格式,這通常在系統的UI層來完成驗證;二是邏輯驗證,數據間往往符合特定的業務邏輯規則,數據操作不能破壞其間邏輯關系而造成系統異常,這通常在系統的底層來完成驗證。本文主要討論前者的實現。

  不過許多系統為了保持數據有效性常常矯枉過正,界面充斥著擁有復雜輸入格式限制的文本輸入框,要求用戶花費大量時間來進行自我數據校正,填寫個表單比高考畫框框還要讓人費勁,企業用戶還好辦些,最多抗議兩聲也就接受,互聯網用戶可不吃這一套,來點創意!

   檢票的老太太們 - 驗證器架構

  WEB應用程序是基于表單來輸入數據。為了確保數據有效性,我們必須在服務端對輸入數據進行檢驗,但考慮到用戶感受,往往又在客戶端插入些javascript腳本??蛻舳蓑炞C就像我們呼吸空氣時的鼻子,先把顆粒物雜質等阻擋在外面,從而大大減輕了肺的負擔;服務器端驗證是構建安全Web應用程序必需的,只有服務器端驗證才可以提供真正應用程序級的安全。雙重校驗,瑣碎無聊,怪不得沒幾人喜歡。

  .NET首先將驗證器與驗證對象分離成兩個部份,驗證對象暴露驗證屬性,檢票員們分頭監督驗證對象,完成數據校驗,比較復雜的校驗可以讓幾位檢票員一起守著;每個頁面需要一位領頭,讓她拿著名單,依次催促頁面內每個驗證器對所轄輸入域進行驗證,匯總出結果;最后頁面需要某些控件能夠自動觸發驗證,這個角色通常是由帶有回發功能的Button類控件來扮演,如圖13-1所示。

按此在新窗口瀏覽圖片


  參與Web窗體驗證的服務器控件必須實現IValidator接口,這是檢票員們的共同特征。用Volidate方法完成校驗過程,得出一個結果值IsValid屬性,包含拒絕放行的理由ErrorMessage屬性。于是有如下定義:

public interface IValidator{
 string ErrorMessage{set;get;}
 bool IsValid{set;get;}
 void Volidate{};
}

  作為校驗行為的原子觸發單位,頁面類設置了一些必要的成員:Page.Validators集合是頁面的驗證器容器,Page.Validate方法將依次調用容器中每個驗證器的Validate方法更新各自的IsValid屬性,Page.Valid屬性用于匯總頁面的校驗結果,它就是頁面的心靈之鎖。

  CausesValidation屬性是引起回發控件的公共屬性,為真時控件在Click事件處理之前自動調用Page.Validate方法,這樣使得我們在大多時候不需要顯式地去調用Page.Validate方法即可完成校驗過程。

   模范 - BaseValidator類及客戶端驗證

  盡管在ASP.NET中,任何通過實現IValidate接口的類都可以被認為是驗證器,但在實際應用中,我們通常把驗證器設計成服務器控件。

  BaseValidator是派生自Label類的抽象基類,除了實現IValidator接口,主要執行校驗必需的各種通用任務,包括從被驗證對象提取值、定義校驗抽象方法、產生客戶端驗證腳本、完成在Page.Validators集合中注冊等等。通過繼承它,我們只要集中精力去實現服務器端和客戶端的驗證邏輯就可以實現自定義驗證器。下例為一檢查CheckBoxList是否有勾選1個以上的自定義驗證器范例。

using System;
using System.Collections;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace essay.Controls{
 //派生于BaseValidator基類的自定義驗證器
 public class RequiredCheckBoxListValidator : BaseValidator {
  private ListControl m_ListCtl;
  //啟用客戶端驗證
  public RequiredCheckBoxListValidator(){
   base.EnableClientScript = true;
  }
  //確定由ControlToValidate指定的被驗證控件是否有效
  protected override bool ControlPropertiesValid(){
   Control webControl = this.FindControl(ControlToValidate);
   if (webControl != null){
    m_ListCtl = (ListControl)webControl;
    return true;
   }
   else
    return false;
  }
  //定義校驗規則
  protected override bool EvaluateIsValid(){
   return (m_ListCtl.SelectedIndex != -1);
  }
  protected override void OnPreRender(EventArgs e) {
   if (this.EnableClientScript) this.GenerateScript();
   base.OnPreRender(e);
  }
  //產生并向頁面注入客戶端驗證腳本
  protected void GenerateScript(){
   StringBuilder sb_Script = new StringBuilder();
   sb_Script.Append("<script language=/"javascript/">/n");
   sb_Script.Append("function cb_vefify(val) {/n");
   sb_Script.Append("var isValid=false;/n");
   sb_Script.Append("var val = document.all[document.all[/""+this.ID+"/"].controltovalidate];/n");
   sb_Script.Append("var col = val.all;/n");
   sb_Script.Append("if ( col != null )/n");
   sb_Script.Append("for ( i = 0; i < col.length; i++ ) /n");
   sb_Script.Append("if (col.item(i).tagName == /"INPUT/") /n");
   sb_Script.Append("if ( col.item(i).checked )isValid=true; /n");
   sb_Script.Append("return isValid;");
   sb_Script.Append("}/n");
   sb_Script.Append("</script>");
   this.Page.RegisterClientScriptBlock("RBLScript", sb_Script.ToString());
   //通過設置驗證器的evaluationfunction attribute來指定其客戶端驗證邏輯
   this.Attributes["evaluationfunction"] = "cb_vefify";
  }
 }
}

  我很丑可是我很能干- 正則表達式(Regular Expression)

  正則表達式被用于描述某一類特定格式的字符串方法,能簡潔地、能幾何倍數地改善文本處理效率,但它不招人疼所以讓人厭惡,原因并不是概念有多高深,主要是它長得太丑!一個字符串是否符合某一類特定格式的字符串,關鍵在于它是否符合這個特定格式的多個匹配規則。

  理解正則表達式的鑰匙在于提煉每條匹配規則的三個要素:字符子集、重復次數與位置。例字符串"兩位數字開頭三位英文字母結尾",寫正則表達式之前需要我們這么變換句式:"開頭 數字{2位} 任意字符{0或多位} 字母{3位} 結尾",正則表達式為"^ [0-9]{2} [/s/S]* [a-zA-Z]{3} $"。

  在每條匹配規則中,可能出現的字符子串有個范圍,屬于固定的字符子集,正則表達式用常量、區域和邏輯運算來表示這個集合,如圖13-2所例,值得注意是部份字符已被定義成元字符,具有特殊的含義。

按此在新窗口瀏覽圖片


  每條匹配規則中,其字符子集可能出現重復,可以用兩種方法表示:一是緊跟著字符子集后加個大括號,內標數字,另一種用元字符表示,如圖13-3例。每條匹配規則中字符子集的位置由其在正則表達式中的位置決定,整個字符串開頭用"^"表示,結尾用"$"表示。

按此在新窗口瀏覽圖片


  在很多時候,兩條或以上的匹配規則可能要用到同一個字符子集,如html標記中,標簽聲明應當是同一字符子集,比如"<div>……</div>"。如果要定義一個字符子集以便其后引用,可用小括號標識,用"/數字"引用。

  正則表達式的應用范圍很廣,除了數據校驗外,UBB論壇、頁面動態轉靜態、搜索技術等時常出現它的身影,"我很丑可是我很能干",在這里我們僅僅只是探討表達式的書寫方法。最后用兩個實例總結,如圖13-4所示。

按此在新窗口瀏覽圖片

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人合集magnet| 亚洲精选在线观看| 亚洲免费伊人电影在线观看av| 色诱女教师一区二区三区| 97色在线视频观看| 国产精品久久久91| 国产亚洲精品久久久优势| 欧美床上激情在线观看| 国产精品久久久久久久久久小说| 日本人成精品视频在线| 精品美女久久久久久免费| 在线成人一区二区| 亚洲天堂av网| 精品香蕉在线观看视频一| 国产精品ⅴa在线观看h| 国产精品视频yy9099| 精品美女永久免费视频| 精品国产一区二区三区在线观看| 久久久久久久激情视频| 国产一区二区三区在线播放免费观看| 国产精品老女人精品视频| 疯狂欧美牲乱大交777| 久久影视电视剧免费网站清宫辞电视| 国产精品视频一区国模私拍| 91免费人成网站在线观看18| 欧美高清视频在线观看| 国产成人激情小视频| 精品国产拍在线观看| 欧美黄色片在线观看| 亚洲精品午夜精品| 国产精品午夜国产小视频| 精品视频—区二区三区免费| 懂色aⅴ精品一区二区三区蜜月| 亚洲精品国产精品国自产在线| 精品久久久免费| 不卡av电影院| 日韩av在线播放资源| 久久影视免费观看| 欧美大人香蕉在线| 欧美极品少妇xxxxx| 国产午夜一区二区| 黑人巨大精品欧美一区免费视频| 97在线视频一区| 国产日韩欧美一二三区| 成人午夜一级二级三级| 自拍偷拍亚洲精品| 欧美激情综合色| 91亚洲精品久久久| 91网站在线看| 亚洲一区二区久久久久久久| 一本色道久久88综合日韩精品| 中文字幕亚洲图片| 亚洲美女黄色片| 欧美孕妇性xx| 毛片精品免费在线观看| 欧美精品激情视频| 精品久久久久久久久久久| 色综合影院在线| 日韩在线一区二区三区免费视频| 91精品在线看| 深夜福利国产精品| 日韩精品高清在线观看| 精品一区二区亚洲| 亚洲精品一区二区在线| 2023亚洲男人天堂| 亚洲va欧美va国产综合剧情| 欧美综合国产精品久久丁香| 国产精品 欧美在线| 青青草原成人在线视频| 欧美激情精品久久久久久久变态| 国产视频自拍一区| 欧美激情手机在线视频| 国产精品视频一区二区三区四| 国产专区精品视频| 懂色aⅴ精品一区二区三区蜜月| 欧美激情精品久久久久久久变态| 国内伊人久久久久久网站视频| 成人有码视频在线播放| 91国产一区在线| 国产在线拍偷自揄拍精品| 国产亚洲精品一区二555| 精品一区二区三区四区在线| 国产日产欧美精品| 北条麻妃在线一区二区| 日韩成人久久久| 三级精品视频久久久久| 国产精品久久久亚洲| 国产精品久久久久aaaa九色| 色婷婷成人综合| 国产98色在线| 欧美野外wwwxxx| 国产日本欧美在线观看| 久久久亚洲成人| 91在线视频免费| 日韩在线观看免费全| 欧美亚洲激情视频| 中文字幕日本精品| 国产一区二区三区丝袜| 亚洲欧美国产高清va在线播| 中文字幕不卡在线视频极品| 国产综合在线视频| 夜夜嗨av一区二区三区四区| 亚洲黄色av女优在线观看| 在线观看91久久久久久| 国模视频一区二区三区| 最近2019中文字幕大全第二页| 国产精品 欧美在线| 色综合视频一区中文字幕| 欧美一区二区三区免费视| 欧美老妇交乱视频| 亚洲国产成人精品电影| 国产视频在线一区二区| 九九久久精品一区| 57pao成人永久免费视频| 亚洲欧洲日产国产网站| 欧美中文字幕在线| 亚洲精品成a人在线观看| 欧美在线亚洲一区| 亚洲国产欧美精品| 国产欧美一区二区三区四区| 日韩国产欧美精品一区二区三区| 日韩三级影视基地| 92看片淫黄大片欧美看国产片| 色婷婷**av毛片一区| 久久成人这里只有精品| 久久91亚洲精品中文字幕| 成人免费在线视频网站| 粗暴蹂躏中文一区二区三区| 亚洲国产另类久久精品| 欧美性受xxxx白人性爽| 在线播放国产精品| 国产欧美日韩精品丝袜高跟鞋| 欧美黄色小视频| 欧洲成人性视频| 国产在线拍偷自揄拍精品| 亚洲美腿欧美激情另类| 亚洲www在线| 日本成人黄色片| 91久久久精品| 亚洲欧洲视频在线| 91精品国产高清久久久久久| 欧美亚洲国产成人精品| 久久久亚洲成人| 亚洲综合在线做性| 91精品国产色综合久久不卡98口| 欧美日韩亚洲91| 国产精品99一区| 久久久精品国产| 亚洲人成在线播放| 亚洲精品动漫久久久久| 亚洲天堂成人在线视频| 在线成人中文字幕| 亚洲色图校园春色| 亚洲国产精品va在看黑人| 欧美综合第一页| 欧美一级黄色网| 一色桃子一区二区| 最新的欧美黄色| 久久人人爽人人爽爽久久| 亚洲国产精品久久久久秋霞蜜臀| 日韩精品在线观看视频| 国产精品久久久久久亚洲影视| 原创国产精品91| 国产美女精品免费电影|