欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET入門(mén)隨想之檢票的老太太

 更新時(shí)間:2006年09月28日 00:00:00   作者:  
  德國(guó)足協(xié)告誡那些可能前往德國(guó)觀看2006年世界杯賽的球迷要提防假票,不要從非代理商和票販子手中購(gòu)票。世界杯門(mén)票都是高科技產(chǎn)品,門(mén)票被植入微芯片,只有通過(guò)合法途徑取得門(mén)票的球迷才能入場(chǎng)。假票現(xiàn)象在近些年的足球大賽上泛濫成災(zāi),德國(guó)足協(xié)希望能通過(guò)宣傳避免世界杯球迷成為其受害者。

   驗(yàn)明正身 - 數(shù)據(jù)有效性

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

  應(yīng)用程序必須確保系統(tǒng)的數(shù)據(jù)有效性有二層含義:一是格式驗(yàn)證,要確保數(shù)據(jù)屬于系統(tǒng)設(shè)計(jì)時(shí)定義的類(lèi)型、范圍,甚至是行業(yè)的特定格式,這通常在系統(tǒng)的UI層來(lái)完成驗(yàn)證;二是邏輯驗(yàn)證,數(shù)據(jù)間往往符合特定的業(yè)務(wù)邏輯規(guī)則,數(shù)據(jù)操作不能破壞其間邏輯關(guān)系而造成系統(tǒng)異常,這通常在系統(tǒng)的底層來(lái)完成驗(yàn)證。本文主要討論前者的實(shí)現(xiàn)。

  不過(guò)許多系統(tǒng)為了保持?jǐn)?shù)據(jù)有效性常常矯枉過(guò)正,界面充斥著擁有復(fù)雜輸入格式限制的文本輸入框,要求用戶花費(fèi)大量時(shí)間來(lái)進(jìn)行自我數(shù)據(jù)校正,填寫(xiě)個(gè)表單比高考畫(huà)框框還要讓人費(fèi)勁,企業(yè)用戶還好辦些,最多抗議兩聲也就接受,互聯(lián)網(wǎng)用戶可不吃這一套,來(lái)點(diǎn)創(chuàng)意!

   檢票的老太太們 - 驗(yàn)證器架構(gòu)

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

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

按此在新窗口瀏覽圖片


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

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

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

  CausesValidation屬性是引起回發(fā)控件的公共屬性,為真時(shí)控件在Click事件處理之前自動(dòng)調(diào)用Page.Validate方法,這樣使得我們?cè)诖蠖鄷r(shí)候不需要顯式地去調(diào)用Page.Validate方法即可完成校驗(yàn)過(guò)程。

   模范 - BaseValidator類(lèi)及客戶端驗(yàn)證

  盡管在ASP.NET中,任何通過(guò)實(shí)現(xiàn)IValidate接口的類(lèi)都可以被認(rèn)為是驗(yàn)證器,但在實(shí)際應(yīng)用中,我們通常把驗(yàn)證器設(shè)計(jì)成服務(wù)器控件。

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

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基類(lèi)的自定義驗(yàn)證器
 public class RequiredCheckBoxListValidator : BaseValidator {
  private ListControl m_ListCtl;
  //啟用客戶端驗(yàn)證
  public RequiredCheckBoxListValidator(){
   base.EnableClientScript = true;
  }
  //確定由ControlToValidate指定的被驗(yàn)證控件是否有效
  protected override bool ControlPropertiesValid(){
   Control webControl = this.FindControl(ControlToValidate);
   if (webControl != null){
    m_ListCtl = (ListControl)webControl;
    return true;
   }
   else
    return false;
  }
  //定義校驗(yàn)規(guī)則
  protected override bool EvaluateIsValid(){
   return (m_ListCtl.SelectedIndex != -1);
  }
  protected override void OnPreRender(EventArgs e) {
   if (this.EnableClientScript) this.GenerateScript();
   base.OnPreRender(e);
  }
  //產(chǎn)生并向頁(yè)面注入客戶端驗(yàn)證腳本
  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());
   //通過(guò)設(shè)置驗(yàn)證器的evaluationfunction attribute來(lái)指定其客戶端驗(yàn)證邏輯
   this.Attributes["evaluationfunction"] = "cb_vefify";
  }
 }
}

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

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

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

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

按此在新窗口瀏覽圖片


  每條匹配規(guī)則中,其字符子集可能出現(xiàn)重復(fù),可以用兩種方法表示:一是緊跟著字符子集后加個(gè)大括號(hào),內(nèi)標(biāo)數(shù)字,另一種用元字符表示,如圖13-3例。每條匹配規(guī)則中字符子集的位置由其在正則表達(dá)式中的位置決定,整個(gè)字符串開(kāi)頭用"^"表示,結(jié)尾用"$"表示。

按此在新窗口瀏覽圖片


  在很多時(shí)候,兩條或以上的匹配規(guī)則可能要用到同一個(gè)字符子集,如html標(biāo)記中,標(biāo)簽聲明應(yīng)當(dāng)是同一字符子集,比如"<div>……</div>"。如果要定義一個(gè)字符子集以便其后引用,可用小括號(hào)標(biāo)識(shí),用"\數(shù)字"引用。

  正則表達(dá)式的應(yīng)用范圍很廣,除了數(shù)據(jù)校驗(yàn)外,UBB論壇、頁(yè)面動(dòng)態(tài)轉(zhuǎn)靜態(tài)、搜索技術(shù)等時(shí)常出現(xiàn)它的身影,"我很丑可是我很能干",在這里我們僅僅只是探討表達(dá)式的書(shū)寫(xiě)方法。最后用兩個(gè)實(shí)例總結(jié),如圖13-4所示。

按此在新窗口瀏覽圖片

 

相關(guān)文章

  • JavaScript驗(yàn)證用戶輸入的是字符或數(shù)字及ASCII Chart應(yīng)用

    JavaScript驗(yàn)證用戶輸入的是字符或數(shù)字及ASCII Chart應(yīng)用

    我們可以根據(jù)onkeydown事件的event.keyCode即是ASCII Chart來(lái)判斷字符或數(shù)字等,本文提供了相關(guān)鍵盤(pán)key對(duì)應(yīng)的ASCII碼,以供用戶使用是參考及使用onpaste事件只能輸入字符和數(shù)字防止粘貼等的,感興趣的朋友可以了解下
    2013-01-01
  • .net?core?中?WebApiClientCore的使用示例代碼

    .net?core?中?WebApiClientCore的使用示例代碼

    這篇文章主要介紹了.net?core?中?WebApiClientCore的使用示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • ASP.NET Core MVC 過(guò)濾器的使用方法介紹

    ASP.NET Core MVC 過(guò)濾器的使用方法介紹

    本篇文章主要介紹了ASP.NET Core MVC 過(guò)濾器的使用方法介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • web.config使用方法指南

    web.config使用方法指南

    這篇文章主要介紹了web.config使用方法,具體格式,注意點(diǎn)等方面,有需要的小伙伴可以參考下。
    2015-05-05
  • 批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)

    批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)

    批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)...
    2007-04-04
  • asp.net顯示頁(yè)面執(zhí)行時(shí)間

    asp.net顯示頁(yè)面執(zhí)行時(shí)間

    Global.asax需要添加的代碼。利用我們了解當(dāng)前頁(yè)面的運(yùn)行效率。
    2009-03-03
  • .Net Core限流的實(shí)現(xiàn)示例

    .Net Core限流的實(shí)現(xiàn)示例

    限流能夠很好的控制住一個(gè)客戶端訪問(wèn)服務(wù)器資源地址的請(qǐng)求次數(shù),本文主要介紹了.Net Core限流的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2021-07-07
  • ASP.NET使用My97DatePicker日期控件實(shí)例

    ASP.NET使用My97DatePicker日期控件實(shí)例

    這篇文章主要為大家詳細(xì)介紹了ASP.NET使用My97DatePicker日期控件實(shí)例,如何使用My97DatePicker日期控件,本文為大家介紹,感興趣的小伙伴們可以參考一下
    2016-04-04
  • asp.net與Discuz!NT整合集成實(shí)例教程

    asp.net與Discuz!NT整合集成實(shí)例教程

    由于項(xiàng)目需要一個(gè)論壇,本來(lái)有CS的,在.net下很出名的國(guó)外開(kāi)源論壇。但為了適應(yīng)國(guó)內(nèi)的風(fēng)氣,最后選用在國(guó)內(nèi)如日中天的Discuz!NT。將Discuz與asp.net開(kāi)發(fā)的網(wǎng)站整合,有很多人已經(jīng)完成了。
    2009-11-11
  • Asp.net TreeView來(lái)構(gòu)建用戶選擇輸入的方法 推薦

    Asp.net TreeView來(lái)構(gòu)建用戶選擇輸入的方法 推薦

    選擇優(yōu)于輸入,這是一般人的共識(shí),面對(duì)繁多的數(shù)據(jù),提供良好的選擇界面,一方面增強(qiáng)用戶的界面體驗(yàn),一方面也提高了數(shù)據(jù)的準(zhǔn)確性,更節(jié)省了用戶的寶貴時(shí)間。
    2009-12-12

最新評(píng)論