成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 在ASP.NET 2.0中操作數(shù)據(jù)之十九:給編輯和新增界面增加驗(yàn)證控件

在ASP.NET 2.0中操作數(shù)據(jù)之十九:給編輯和新增界面增加驗(yàn)證控件

熱門標(biāo)簽:外呼電話機(jī)器人成本 地圖標(biāo)注軟件免費(fèi)下載 蘇州如何辦理400電話 百應(yīng)電話機(jī)器人外呼系統(tǒng) 西寧呼叫中心外呼系統(tǒng)線路商 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 400電話辦理怎么樣 聯(lián)通官網(wǎng)400電話辦理 臨沂智能電話機(jī)器人加盟

導(dǎo)言

  在前面三節(jié)的示例中,GridView和DetailsView控件使用的是綁定列和CheckBoxField(綁定GridView和DetailsView時(shí),通過智能標(biāo)記可以令VS根據(jù)數(shù)據(jù)庫自動(dòng)增加對應(yīng)的類型)。當(dāng)編輯GridView或者DetailsView中的一行時(shí),非只讀屬性的綁定列將自動(dòng)轉(zhuǎn)為textbox,以便用戶修改現(xiàn)有的數(shù)據(jù)。同樣地,當(dāng)在DetailsView控件中新增記錄時(shí),InsertVisible屬性為true(默認(rèn)值)的綁定列會呈現(xiàn)出空的textbox,以接受用戶輸入。CheckBoxField列也是如此,通常作為只讀的checkbox顯示,新增/編輯記錄時(shí)則可以接受選擇。

  盡管BoundField和CheckBoxField提供的編輯和添加界面相當(dāng)有用,卻缺乏驗(yàn)證功能。當(dāng)用戶產(chǎn)生一些數(shù)據(jù)錄入錯(cuò)誤――比如遺漏了 ProductName字段或者為UnitsInStock輸入一個(gè)無效值(如-50)――那么應(yīng)用程序?qū)牡讓訏伋鲆粋€(gè)異常。盡管我們可以很好的處理這個(gè)異常像上節(jié)教程previous tutorial中討論的,但是,一個(gè)完美的‘新增/編輯'用戶界面應(yīng)該包括驗(yàn)證控件,在第一時(shí)間阻止用戶輸入這些無效數(shù)據(jù)。

  為了提供一個(gè)自定義的新增/編輯界面,需要將BoundField和CheckBoxField換成模板列(ItemplateField)。關(guān)于模板列,已經(jīng)在《Using TemplateFields in the GridView Control 和 Using TemplateFields in the DetailsView Control》教程里討論過了,由幾個(gè)處理不同行狀態(tài)的模板組成。模板列的項(xiàng)模板(ItemTemplate),用來呈現(xiàn)DetailsView或GridView控件中的只讀字段或行,而EditItemplate和InsertItemTemplate則分別是編輯和新增模式的界面模板。

  在本節(jié)教程中,你會發(fā)現(xiàn)為模板列的EditItemTemplate和InsertItemTemplate提供驗(yàn)證控件來提供更健壯的用戶界面是多么的簡單。明確一點(diǎn),本節(jié)教程采用《Examining the Events Associated with Inserting, Updating, and Deleting 》中創(chuàng)建的示例代碼,來增加新增/編輯時(shí)的相關(guān)驗(yàn)證。

一、復(fù)制《研究插入、更新和刪除的關(guān)聯(lián)事件》的示例代碼

  在《研究插入、更新和刪除的關(guān)聯(lián)事件》教程中我們創(chuàng)建了一個(gè)頁面,并在一個(gè)可編輯的GridView中列表顯示產(chǎn)品的名字和價(jià)格。頁面還有一個(gè)DetailsView,DefaultMode 屬性設(shè)置成Insert,因此始終呈現(xiàn)為新增模式。通過DetailsView,用戶可以錄入名字和價(jià)格增加新的產(chǎn)品,點(diǎn)擊Insert后,新產(chǎn)品就被增加到系統(tǒng)里(見圖1)。

圖1:以前的代碼允許用戶增加新的產(chǎn)品或修改已有的產(chǎn)品

本節(jié)教程的目標(biāo)是為DetailsView和GridView提供驗(yàn)證控件。更精確一些,此驗(yàn)證邏輯將是:

· 新增/編輯產(chǎn)品時(shí)name為必填項(xiàng)
· 新增記錄時(shí)price為必填項(xiàng);編輯時(shí)依然需要價(jià)格,并且在GridView的RowUpdating事件處理中應(yīng)用上節(jié)教程previous tutorial中的程序邏輯
· 確保輸入的price是有效的貨幣格式

  在考慮為前面代碼增加驗(yàn)證之前,我們首先需要復(fù)制上節(jié)教程previous tutorial 示例DataModificationEvents.aspx中的代碼到本節(jié)教程的UIValidation.aspx頁面上。要完成此點(diǎn)需要復(fù)制DataModificationEvents.aspx頁面的元素標(biāo)記和它的后臺代碼。先按下面步驟拷貝元素標(biāo)記:

1.在Visual Studio中打開DataModificationEvents.aspx
2.轉(zhuǎn)到頁面的源視圖(單擊頁面底部的源(Source)按鈕)
3.拷貝asp:Content> 至 /asp:Content> 標(biāo)記間的文本(3到44行),見圖2。

圖2:拷貝asp:Content> 控件中的文本

4.打開UIValidation.aspx頁
5.轉(zhuǎn)到頁面的源視圖
6.粘貼文本到asp:Content>控件

  然后打開代碼文件DataModificationEvents.aspx.cs,拷貝EditInsertDelete_DataModificationEvents 類中的代碼,及3個(gè)事件處理(Page_Load, GridView1_RowUpdating, 和 ObjectDataSource1_Inserting),注意不要把類聲明和using語句也拷貝過來,然后將它們粘貼到UIValidation.aspx.cs中的 EditInsertDelete_UIValidation里。

  上面的工作完成后,不要急著動(dòng)手,先砌杯茶在瀏覽器里查看一下是否有誤,這兩個(gè)頁面應(yīng)該具有同樣的輸出和功能。(參照圖1 ,DataModificationEvents.aspx運(yùn)行時(shí)的抓圖)。

二、將綁定列轉(zhuǎn)換為模板列

要增加驗(yàn)證控件到新增/編輯界面,DetailsView 和 GridView必須將綁定列轉(zhuǎn)換為模板列。要實(shí)現(xiàn)此轉(zhuǎn)換,先點(diǎn)擊GridView的智能標(biāo)記(譯者:GridView右上角的箭頭),再選擇‘編輯列 …'(Edit Columns),在左邊依次選擇綁定字段并點(diǎn)擊‘將此字段轉(zhuǎn)換為TemplateField'鏈接(英文版是Convert this field into a TemplateField,下同)。

圖3:將DetailsView和GridView的綁定列轉(zhuǎn)換為模板列

通過剛才操作的字段(英文版是Fields)對話框,綁定列可以轉(zhuǎn)換為模板列,同樣擁有了只讀,編輯,新增等原有功能。下面的代碼顯示了 DetailsView中轉(zhuǎn)換為模板列后的ProductName字段的元素標(biāo)記:

asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
  EditItemTemplate>
    asp:TextBox ID="TextBox1" runat="server" Text='%# Bind("ProductName") >'>/asp:TextBox>
  /EditItemTemplate>
  InsertItemTemplate>
    asp:TextBox ID="TextBox1" runat="server" Text='%# Bind("ProductName") %>'>/asp:TextBox>
  /InsertItemTemplate>
  ItemTemplate>
    asp:Label ID="Label1" runat="server" Text='%# Bind("ProductName") %>'>/asp:Label>
  /ItemTemplate>
/asp:TemplateField>

  注意該模板列自動(dòng)創(chuàng)建了三個(gè)模板列,ItemTemplate, EditItemTemplate以及InsertItemTemplate。項(xiàng)模板ItemTemplate使用Label Web控件簡單顯示字段值(ProductName),而EditItemTemplate和InsertItemTemplate則使用TextBox控件并利用其Text屬性來處理相關(guān)的數(shù)據(jù)。由于我們在頁面上只使用DetailsView實(shí)現(xiàn)新增,你可以刪除ItemTemplate和EditItemTemplate,當(dāng)然留著也無關(guān)緊要。

  由于GridView不支持DetailsView內(nèi)建的新增功能,將GridView的ProductName字段轉(zhuǎn)換為模板列,并只保留ItemTemplate和 EditItemTemplate:

asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
  EditItemTemplate>
    asp:TextBox ID="TextBox1" runat="server" Text='%# Bind("ProductName") %>'>/asp:TextBox>
  /EditItemTemplate>
  ItemTemplate>
    asp:Label ID="Label1" runat="server" Text='%# Bind("ProductName") %>'>/asp:Label>
  /ItemTemplate>
/asp:TemplateField>

  通過點(diǎn)擊‘將此字段轉(zhuǎn)換為TemplateField'鏈接,Visual Studio創(chuàng)建了一個(gè)模板列模擬綁定列的界面,這一點(diǎn)可以通過在瀏覽器里查看頁面來證實(shí),替換前后外觀和行為應(yīng)該是完全一致的。

  注意:可以根據(jù)需要在模板里隨意定制編輯界面。例如,也許我們對UnitPrice字段使用一個(gè)小一點(diǎn)的TextBox。要實(shí)現(xiàn)這一點(diǎn)可以通過設(shè)置 TextBox的Columns屬性或者通過Width屬性指定一個(gè)固定寬度。下節(jié)教程會討論如何用其它的數(shù)據(jù)輸入Web控件替換TextBox來定制編輯界面。

三、為GridView的項(xiàng)編輯模板(EditItemTemplate)增加驗(yàn)證控件

  創(chuàng)建數(shù)據(jù)錄入表單時(shí),限制用戶錄入必填的,合法的以及格式化的數(shù)據(jù)十分重要。為確保用戶錄入數(shù)據(jù)都是有效的,ASP.NET提供了5種內(nèi)建的驗(yàn)證控件來驗(yàn)證單一控件的值:

 · RequiredFieldValidator – 計(jì)算輸入控件的值以確保用戶輸入值
· CompareValidator – 將輸入控件的值同常數(shù)值或其他輸入控件的值相比較,以確定這兩個(gè)值是否與由比較運(yùn)算符(小于、等于、大于、類型等等)指定的關(guān)系相匹配
· RangeValidator – 計(jì)算輸入控件的值,以確定該值是否在指定的上限與下限之間
· RegularExpressionValidator – 計(jì)算輸入控件的值,以確定該值是否與某個(gè)正則表達(dá)式 所定義的模式相匹配
· CustomValidator – 計(jì)算輸入控件的值以確定它是否通過自定義的驗(yàn)證邏輯

關(guān)于這五種控件的更多信息,請參閱 《ASP.NET Quickstart Tutorials》中的Validation Controls section。

  本節(jié)教程中,對于DetailsView和GridView中的ProductName模板列我們需要使用RequiredFieldValidator,而DetailsView的UnitPrice模板列也需要一個(gè)RequiredFieldValidator。此外,還需要給所有的UnitPrice模板列增加一個(gè)CompareValidator,以確保輸入的價(jià)格大于等于0并且是有效的貨幣格式。

  注意:ASP.NET 1.x中已經(jīng)包含了這幾個(gè)驗(yàn)證控件,但是ASP.NET 2.0中增加了一些改進(jìn),主要的兩點(diǎn)是客戶端腳本對非IE瀏覽器的支持和對頁面上的部分驗(yàn)證控件進(jìn)行分組實(shí)現(xiàn)某個(gè)按鈕的特定驗(yàn)證控件組,參閱《Dissecting the Validation Controls in ASP.NET 2.0》(譯者:也可參閱MSDN http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnvs05/html/ValGroups.asp)。

  現(xiàn)在我們來給GridView模板列中的EditItemTemplate增加這些要用到的驗(yàn)證控件。首先點(diǎn)擊GridView的智能標(biāo)記選擇編輯模板打開模板編輯界面,然后從下拉列表中選擇你要編輯的模板。由于我們要處理的是編輯界面,這里我們要給ProductName和UnitPrice的EditItemTemplate模板增加驗(yàn)證控件。

圖4:展開ProductName和UnitPrice的 EditItemTemplate模板

  在ProductName的EditItemTemplate中,通過拖拉方式從工具箱里給編輯界面增加一個(gè)RequiredFieldValidator,放在TextBox后面。

圖5:為ProductName的EditItemTemplate增加一個(gè)RequiredFieldValidator

  所有的驗(yàn)證控件都只能為單個(gè)ASP.NET Web控件服務(wù),因此,需要讓新增的這個(gè)驗(yàn)證控件為EditItemTemplate的TextBox控件進(jìn)行驗(yàn)證;這需要將要驗(yàn)證控件的ID設(shè)置給驗(yàn)證控件的 ControlToValidate property屬性。TextBox當(dāng)前的ID可能是一個(gè)莫明的TextBox1,我們最好還是賦予它一個(gè)更合適的ID,單擊模板中的TextBox,按F4查看屬性窗口,將ID由TextBox1改為EditProductName。

圖6:將TextBox的ID改名為 EditProductName

  接下來,設(shè)置RequiredFieldValidator的ControlToValidate屬性為EditProductName。最后,設(shè)置ErrorMessage屬性為“You must provide the product's name” 并將Text屬性設(shè)置為“*”。如果設(shè)置了Text屬性,那么當(dāng)驗(yàn)證失敗的時(shí)候文本值就會被顯示出來。ErrorMessage屬性也是必須的,它是為ValidationSummary準(zhǔn)備的;當(dāng)Text屬性值被省略時(shí),ErrorMessage屬性也會在無效輸入時(shí)作為文本顯示出來。

  設(shè)置完RequiredFieldValidator的這些屬性后,屏幕應(yīng)該如圖7所示:

圖7:設(shè)置RequiredFieldValidator控件的 ControlToValidate, ErrorMessage和Text 屬性

  為ProductName的EditItemTemplate增加完RequiredFieldValidator,余下的就是為UnitPrice的EditItemplate模板增加一些必要的驗(yàn)證控件。由于我們決定UnitPrice編輯時(shí)作為選填,所以并不需要RequiredFieldValidator。不過需要增加一個(gè)CompareValidator來確保UnitPrice 有效,必須大于等于0并且時(shí)貨幣格式。

  在為UnitPrice 的EditItemTemplate模板增加CompareValidator之前,先將TextBox的ID改為EditUnitPrice。然后添加CompareValidator控件并設(shè)置 ControlToValidate屬性為EditUnitPrice,ErrorMessage屬性為“The price must be greater than or equal to zero and cannot include the currency symbol”,Text 屬性為 “*”。

  為了確保UnitPrice值必須大于等于0,設(shè)置CompareValidator的Operator屬性為GreaterThanEqual,ValueToCompare屬性為 “0”, 并且Type屬性為Currency。下面的代碼顯示了UnitPrice 模板列中的 EditItemTemplate調(diào)整后的樣子:

EditItemTemplate>
  asp:TextBox ID="EditUnitPrice" runat="server" Text='%# Bind("UnitPrice", "{0:c}") %>' Columns="6">/asp:TextBox>
  asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="EditUnitPrice"ErrorMessage="The price must be greater than or equal to zero and cannot include the currency symbol"Operator="GreaterThanEqual" Type="Currency" ValueToCompare="0">*/asp:CompareValidator>
/EditItemTemplate>

  這些調(diào)整之后,在瀏覽器里查看這個(gè)頁面。如果對product編輯時(shí)你嘗試省略name或者輸入一個(gè)無效的price,星號就會顯示在文本框后面。如圖8顯示,包含了貨幣符合的price,如$19.95,將被視作無效。CompareValidator控件的Currency類型允許數(shù)字分割符(像逗號,小數(shù)點(diǎn),取決于culture設(shè)置),以正負(fù)號開頭,但是不允許貨幣符號。而編輯界面UnitPrice卻呈現(xiàn)為貨幣形式,這種行為可能令用戶很困惑。

  注意:回想一下《研究插入、更新和刪除的關(guān)聯(lián)事件》教程,我們設(shè)置了綁定列的DataFormatString屬性為{0:c},使其格式化為貨幣。由于我們將ApplyFormatInEditMode屬性置為true,導(dǎo)致 GridView編輯界面將UnitPrice格式化為貨幣格式。當(dāng)綁定列轉(zhuǎn)換為模板列會保留這些設(shè)置并且對TextBox的Text屬性使用綁定語法%# Bind("UnitPrice", "{0:c}") %>進(jìn)行格式化。

圖8:無效輸入時(shí)文本框后面顯示的星號

基于如此的驗(yàn)證方式,在編輯記錄時(shí)用戶必須手動(dòng)刪除貨幣符號,很難讓人接受。下面有三種選擇進(jìn)行補(bǔ)救:

1. 配置EditItemTemplate使 UnitPrice不會被格式化為貨幣。
2. 移除CompareValidator并替換為RegularExpressionValidator,允許用戶輸入貨幣符號,但是要編寫代碼來適應(yīng)不同的文化設(shè)置。
3. 移除驗(yàn)證控件并在GridView的RowUpdating事件處理中進(jìn)行服務(wù)器端驗(yàn)證邏輯。

  我們這里采用第一種方式。UnitPrice通過EditItemTemplate中的綁定表達(dá)式%# Bind("UnitPrice", "{0:c}") %>轉(zhuǎn)換為貨幣格式。將其改為Bind("UnitPrice", "{0:n2}")格式化為兩位小數(shù)的數(shù)字。這些操作可以直接在元素標(biāo)記里完成,也可以通過點(diǎn)擊EditUnitPrice文本框的‘編輯 DataBindings…'鏈接(見圖9、圖10)

圖9:點(diǎn)擊TextBox的‘編輯 DataBindings'鏈接

圖10:為綁定表達(dá)式指定特定格式

  這些改變之后,編輯界面的price被格式化為含義逗號和小數(shù)點(diǎn)的格式,卻沒有了貨幣符號。

  注意: UnitPrice的 EditItemTemplate 不包含 RequiredFieldValidator, 運(yùn)行回傳并繼續(xù)更新邏輯。然而,《研究插入、更新和刪除的關(guān)聯(lián)事件》教程中拷過來的RowUpdating 事件處理包含了對提供的UnitPrice的檢查代碼。刪除邏輯,保持原樣,或者給UnitPrice的EditItemTemplate增加RequiredFieldValidator 悉隨尊便。

四:概述頁上的數(shù)據(jù)錄入問題

  除了這5個(gè)驗(yàn)證控件之外,ASP.NET包含了一個(gè)總結(jié)控件ValidationSummary control,可以顯示那些檢測到無效數(shù)據(jù)的驗(yàn)證控件的ErrorMessage。以文本方式在頁上某個(gè)位置概述錯(cuò)誤結(jié)果,或者通過一個(gè)客戶端消息框。下面我們?yōu)槌绦蛟黾右粋€(gè)客戶端消息框概述頁上全部的驗(yàn)證問題。

  從工具箱拖一個(gè)ValidationSummary控件到設(shè)計(jì)窗口上,它的位置沒什么要求,因?yàn)槲覀兇蛩惆阉韵⒖虻男问斤@示。在增加控件完之后,設(shè)置其ShowSummary屬性為false并設(shè)置ShowMessageBox屬性為true。這樣以來,所有的驗(yàn)證錯(cuò)誤都會顯示在一個(gè)客戶端消息框中。

圖11:客戶端消息框中的驗(yàn)證錯(cuò)誤總結(jié) (點(diǎn)擊放大)

五、為DetailsView的InsertItemTemplate增加驗(yàn)證控件

  本教程中余下的部分就是為DetailsView的新增界面增加驗(yàn)證控件。這一工作與第三小節(jié)一樣,這里不再贅言。像GridView的EditItemTemplates 操作中提到的,推薦重命名TextBox的ID,這里分別使用InsertProductName 和 InsertUnitPrice而不是TextBox1 和 TextBox2。

  為ProductName的 InsertItemTemplate增加RequiredFieldValidator驗(yàn)證控件,并設(shè)置其ControlToValidate 為模板中TextBox的ID, 設(shè)置Text 屬性為 “*” ,ErrorMessage 屬性為 “You must provide the product's name”。

  由于頁面上的UnitPrice對于新增記錄是必填項(xiàng),所以我們在UnitPrice的 InsertItemTemplate中為其增加RequiredFieldValidator,設(shè)置ControlToValidate, Text和ErrorMessage 等相關(guān)屬性。最后,在UnitPrice 的InsertItemTemplate增加適當(dāng)?shù)腃ompareValidator,參照前面UnitPrice增加 CompareValidator的情形配置其ControlToValidate, Text, ErrorMessage, Type, Operator和 ValueToCompare等相關(guān)屬性。

  通過增加的這些驗(yàn)證控件,新的product如果不提供name或者price為負(fù)數(shù)或者非法格式都會被系統(tǒng)拒絕添加。

圖12:DetailsView新增界面中添加的驗(yàn)證邏輯 (點(diǎn)擊放大)

六、對驗(yàn)證控件進(jìn)行分組

  頁面上有兩套邏輯上獨(dú)立的驗(yàn)證控件集合: GridView的編輯界面和DetailsView新增界面上相應(yīng)的兩組。默認(rèn)情況下,當(dāng)postback發(fā)生時(shí)頁面上所有的驗(yàn)證都會生效。顯然,當(dāng)編輯記錄時(shí)我們不希望DetailsView新增功能的驗(yàn)證起作用,圖13說明了這種尷尬局面-當(dāng)用戶在編輯product時(shí)輸入了有些有效數(shù)據(jù),在點(diǎn)擊更新時(shí)卻由于新增功能中的name和price空白而產(chǎn)生驗(yàn)證錯(cuò)誤。

圖13:更新Product引發(fā)新增功能的驗(yàn)證控件 (點(diǎn)擊放大)

  ASP.NET 2.0中的驗(yàn)證控件可以進(jìn)行分組,這一功能是通過ValidationGroup屬性。為了將這些驗(yàn)證控件關(guān)聯(lián)到一個(gè)組,只需把ValidationGroup屬性指定成同一個(gè)值。本教程中,將GridView模板中的ValidationGroup屬性統(tǒng)一設(shè)置為EditValidationControls,而DetailsView模板中的 ValidationGroup屬性則為InsertValidationControls。上述操作可以直接在代碼編輯窗口完成或者通過設(shè)計(jì)器模板編輯界面的屬性窗口修改。

  ASP.NET 2.0中除了驗(yàn)證控件,按鈕和按鈕相關(guān)控件也增加了ValidationGroup屬性。驗(yàn)證組中的驗(yàn)證控件只在有相同ValidationGroup屬性的按鈕產(chǎn)生 postback時(shí)才會進(jìn)行有效性檢測,例如,為使DetailsView的新增按鈕可以觸發(fā)InsertValidationControls驗(yàn)證組,我們給CommandField的 ValidationGroup屬性指定為InsertValidationControls(圖14),而GridView中CommandField的ValidationGroup屬性則指定為 EditValidationControls。

圖14:設(shè)置DetailsView中CommandField的 ValidationGroup屬性為InsertValidationControls

  上述操作后,DetailsView和GridView的模板TemplateFields 和 CommandFields大致如下:DetailsView中的TemplateField模板和CommandField模板:

asp:TemplateField HeaderText="ProductName"
 SortExpression="ProductName">
  InsertItemTemplate>
    asp:TextBox ID="InsertProductName" runat="server"
     Text='%# Bind("ProductName") %>'>/asp:TextBox>
    asp:RequiredFieldValidator ID="RequiredFieldValidator2"
     runat="server" ControlToValidate="InsertProductName"
      ErrorMessage="You must provide the product name"
      ValidationGroup="InsertValidationControls">*
    /asp:RequiredFieldValidator>
  /InsertItemTemplate>
/asp:TemplateField>
asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
  InsertItemTemplate>
     asp:TextBox ID="InsertUnitPrice" runat="server"
      Text='%# Bind("UnitPrice") %>' Columns="6">
     /asp:TextBox>
     asp:RequiredFieldValidator ID="RequiredFieldValidator3"
      runat="server" ControlToValidate="InsertUnitPrice"
      ErrorMessage="You must provide the product price"
      ValidationGroup="InsertValidationControls">*
     /asp:RequiredFieldValidator>
    asp:CompareValidator ID="CompareValidator2" runat="server"
      ControlToValidate="InsertUnitPrice"
      ErrorMessage="The price must be greater than or equal to zero and
             cannot include the currency symbol"
      Operator="GreaterThanEqual" Type="Currency" ValueToCompare="0"
      ValidationGroup="InsertValidationControls">*
    /asp:CompareValidator>
   /InsertItemTemplate>
 /asp:TemplateField>
asp:CommandField ShowInsertButton="True"
 ValidationGroup="InsertValidationControls" />

GridView中的CommandField模板和TemplateFields模板:
asp:CommandField ShowEditButton="True" ValidationGroup="EditValidationControls" />
asp:TemplateField HeaderText="ProductName"
 SortExpression="ProductName">
  EditItemTemplate>
    asp:TextBox ID="EditProductName" runat="server"
     Text='%# Bind("ProductName") %>'>
    /asp:TextBox>
    asp:RequiredFieldValidator ID="RequiredFieldValidator1"
      runat="server" ControlToValidate="EditProductName"
      ErrorMessage="You must provide the product name"
      ValidationGroup="EditValidationControls">*
    /asp:RequiredFieldValidator>
  /EditItemTemplate>
  ItemTemplate>
    asp:Label ID="Label1" runat="server"
     Text='%# Bind("ProductName") %>'>/asp:Label>
  /ItemTemplate>
/asp:TemplateField>
asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
  EditItemTemplate>
    asp:TextBox ID="EditUnitPrice" runat="server"
     Text='%# Bind("UnitPrice", "{0:n2}") %>' Columns="6">/asp:TextBox>
    asp:CompareValidator ID="CompareValidator1" runat="server"
      ControlToValidate="EditUnitPrice"
      ErrorMessage="The price must be greater than or equal to zero and
              cannot include the currency symbol"
      Operator="GreaterThanEqual" Type="Currency"
      ValueToCompare="0"
      ValidationGroup="EditValidationControls">*
    /asp:CompareValidator>
  /EditItemTemplate>
  ItemTemplate>
    asp:Label ID="Label2" runat="server"
      Text='%# Bind("UnitPrice", "{0:c}") %>'>
    /asp:Label>
  /ItemTemplate>
/asp:TemplateField>

  當(dāng)GridView的更新按鈕點(diǎn)擊時(shí),編輯中特定的驗(yàn)證控件將會開始檢測,而當(dāng)DetailsView中的新增按鈕被點(diǎn)擊時(shí),新增功能的相關(guān)驗(yàn)證生效,圖13的高亮部分顯示了此舉解決的問題。但是這些改動(dòng)之后,輸入無效數(shù)據(jù)時(shí)ValidationSummary驗(yàn)證總結(jié)卻不再顯示了。這是由于 ValidationSummary控件也擁有ValidationGroup屬性并且只顯示來自于同一驗(yàn)證組中驗(yàn)證控件的信息。因此,我們需要使用兩個(gè)驗(yàn)證控件,分別作為InsertValidationControls驗(yàn)證組和EditValidationControls驗(yàn)證組:

asp:ValidationSummary ID="ValidationSummary1" runat="server"
  ShowMessageBox="True" ShowSummary="False"
  ValidationGroup="EditValidationControls" />
asp:ValidationSummary ID="ValidationSummary2" runat="server"
  ShowMessageBox="True" ShowSummary="False"
  ValidationGroup="InsertValidationControls" />

寫到這里,本節(jié)教程就可以畫上句號了。

小結(jié)

  雖然綁定列BoundField可以提供了新增/編輯界面,卻不能對其進(jìn)行定制。很多情況,我們要給新增/編輯增加驗(yàn)證功能以確保用戶輸入合法有效的數(shù)據(jù)。為此,我們將BoundFields轉(zhuǎn)換成了TemplateField,并在相應(yīng)模板中增加了驗(yàn)證控件。本節(jié)教程擴(kuò)展了《Examining the Events Associated with Inserting, Updating, and Deleting》中的代碼,為DetailsView的新增和GridView的編輯界面增加了驗(yàn)證功能。此外,還演示了如何使用ValidationSummary控件顯示驗(yàn)證總結(jié)以及如何對驗(yàn)證控件進(jìn)行分組。

  正如本文所見,模板列允許為新增/編輯界面增加驗(yàn)證控件,當(dāng)然也可以擴(kuò)展其他的Web控件。在下節(jié)教程中,將會演示如何用可數(shù)據(jù)綁定的DropDownList控件替換原有的TextBox,僅僅通過一個(gè)外鍵(如Products表中的CategoryID或SupplierID)。

祝編程快樂!

作者簡介

Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用微軟Web技術(shù)。Scott是個(gè)獨(dú)立的技術(shù)咨詢顧問,培訓(xùn)師,作家,最近完成了將由Sams出版社出版的新作, 《24小時(shí)內(nèi)精通ASP.NET 2.0》(英文) 。 他的聯(lián)系電郵為mitchell@4guysfromrolla.com,也可以通過他的博客http://scottonwriting.net/與他聯(lián)系。

您可能感興趣的文章:
  • ASP.NET表單驗(yàn)證方法詳解
  • asp.net 繼承自Page實(shí)現(xiàn)統(tǒng)一頁面驗(yàn)證與錯(cuò)誤處理
  • asp.net MaxLengthValidator 最大長度驗(yàn)證控件代碼
  • jQuery 驗(yàn)證插件 Web前端設(shè)計(jì)模式(asp.net)
  • ASP.net的驗(yàn)證控件淺析
  • ASP.NET MVC5添加驗(yàn)證(4)
  • ASP.NETWeb服務(wù)器驗(yàn)證控件如何使用
  • ASP.NET中HTML頁面的訪問驗(yàn)證設(shè)置方法
  • 詳解ASP.NET MVC Form表單驗(yàn)證
  • ASP.NET中Validation驗(yàn)證控件正則表達(dá)式特殊符號的說明
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十九:在DataList的編輯界面里添加驗(yàn)證控件

標(biāo)簽:甘肅 臨夏 海西 聊城 慶陽 中衛(wèi) 清遠(yuǎn)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之十九:給編輯和新增界面增加驗(yàn)證控件》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之十九:給編輯和新增界面增加驗(yàn)證控件》相關(guān)的同類信息!
  • 本頁收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之十九:給編輯和新增界面增加驗(yàn)證控件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    91精品福利观看| 人人插人人干| 免费永久视频| 竹内纱里奈兽皇系列在线观看| 成人av动漫| 亚洲精品视频二区| 两个人免费视频观看日本| 男女交配网站| 黄色漫画在线免费看| 欧美丰满日韩| 午夜视黄欧洲亚洲| 四虎精品视频| 中文字幕在线视频久| 欧美特级xxxxbbbb毛片| 91福利视频在线观看| 一级欧美视频| 羞羞在线观看网站| 国产精品亚洲а∨天堂免在线| 中文字幕亚洲二区| 免费电影一区| 一区二区 亚洲| 黄色一级片一级片| 亲爱的老师9免费观看全集电视剧| 国产精品久久久久毛片软件| 日日噜噜夜夜狠狠视频| 亚洲三区在线观看| 天堂中文网在线| 精品人妻av一区二区三区| 日韩精品一区二区亚洲av| 羞羞污视频在线观看| 激情伦成人综合小说| 午夜三级在线观看| 玖玖综合伊人| 国产精品亚洲午夜一区二区三区| 中文字幕av一区二区三区| 麻豆明星ai换脸视频| 国产一区二区电影在线观看| 国产亚洲欧美日韩日本| 国产免费久久精品| 亚洲欧美手机在线| 污污美女网站| 成人自拍网站| 亚洲一区二区在线看| 一本一本久久a久久综合精品| 国产在线观看不卡一区二区三区| 巨胸大乳www视频免费观看| 亚洲一级二级三级在线免费观看| 熟年交尾五十路视频在线播放| 欧洲中文字幕国产精品| 亚洲v在线观看| 无码视频一区二区三区| 中国女人内谢69xxx视频| 国产毛片在线视频| 国产精品av久久久久久麻豆网| 久久久亚洲欧洲日产国码αv| 国产成人精品久久二区二区| 日本三级中国三级99人妇网站| 国产激情999| xvideos成人免费中文版| 99久久亚洲精品| 99热国内精品| 3d动漫啪啪精品一区二区免费| 精品不卡一区二区| 久久久av免费| 小小女视频网站色琼网站| 国产精品久久久久7777| 97精品久久久| 天天操天天摸天天舔| 91中文字幕在线| 国产情侣一区二区三区| 欧美日韩一区久久| 亚洲女人在线观看| 国产盗摄女厕一区二区三区| 亚洲人成影院77777| 91精品天堂福利在线观看| av福利精品导航| 久久夜色精品一区| 国产成人在线看| 亚洲最新视频在线播放| 99久久精品国产网站| 亚洲五月六月| 丁香婷婷久久久综合精品国产| 久久资源中文字幕| 欧美精品三级日韩久久| 欧洲精品久久久久毛片完整版| 一级特黄性色生活片| 国产秒拍福利视频露脸| 亚洲黄色天堂| 久久成人在线观看| 欧美污视频网站| 日韩日韩日韩日韩日韩| 一本色道久久综合亚洲精品不| 中文字幕在线观看一区二区三区| 亚洲成a人片在线| dj大片免费在线观看| 国产精品一区二区午夜嘿嘿嘿小说| 黄色免费网站在线| 日韩精品在线观| 国产99一区视频免费| wwww亚洲| 亚洲.国产.中文慕字在线| 国产一区二区三区视频在线播放| 欧美亚洲综合在线| 国产精品久久久久桃色tv| 日本美女一区二区三区视频| 亚洲国产成人精品激情在线| 欧美日韩影院| 国产wwwxxx| 国产女人精品视频| 亚洲欧美另类色图| www.男人天堂.com| 男女视频在线观看免费| 国产精品视频看看| 丁香色欲久久久久久综合网| 欧美在线观看网站| 污网站在线免费看| 亚洲成人av资源网| 成人影院在线视频| 五月天激情视频在线观看| 四虎在线免费看| 九九免费精品视频| 黄色av网站在线播放| 精品视频在线免费观看| 亚洲乱码中文字幕久久孕妇黑人| 国产伦精品一区二区三区精品视频| 国产目拍亚洲精品99久久精品| 成人午夜电影在线播放| 日韩成人网免费视频| 成人欧美一区二区三区白人| 亚洲一区二区综合| 最近更新的2019中文字幕| 91国内免费在线视频| 懂色av中文一区二区三区| 大胆人体一区二区| 91在线视频官网| 亚洲成va人在线观看| 日韩电影在线视频| 一区二区三区四区免费视频| 欧美黑人又粗大| 国产免费无遮挡| 亚洲经典中文字幕| 黄色在线观看网| 国产精品久久久久久在线观看| 日本高清免费在线视频| 国产伦子伦对白视频| 5252色成人免费视频| 中文字幕第八页| 日本不卡不卡| 欧美成人精品xxx| 欧美色图天堂| 日韩欧美在线不卡| 国产欧美日韩中文字幕在线| 二区三区不卡不卡视频| 日韩高清欧美激情| 制服丝袜亚洲精品中文字幕| 久久99精品久久久久久久久久久久| 五月天精品视频| 色综合久久久无码中文字幕波多| 日韩一区二区视频在线| 一区二区精品在线观看| 久久影院午夜论| 国内不卡的一区二区三区中文字幕| 亚洲国产女人aaa毛片在线| 日韩中文字幕国产精品| 免费永久在线观看黄网| 久热免费在线观看| 亚洲免费观看视频| 免费看污片的软件| av网站手机在线观看| 999久久久精品一区二区| 一级国产黄色片| 日韩中文在线中文网三级| 300部国产真实乱| 成人免费电影视频| 久久综合免费视频影院| 欧美性猛交xxxx黑人猛交| 国产精品女人网站| av在线二区| 青青青草网站免费视频在线观看| 亚洲自拍av在线| 欧美激情一区二区三区在线| 国产精成人品免费观看| 亚洲欧美日本精品| 国产a级毛片一区| 日韩精品中文字幕在线观看| 粉嫩久久久久久久极品| 中文字幕日韩欧美| 调教视频在线观看| 97在线视频国产| 一区二区国产盗摄色噜噜| 国产亚洲欧美日韩在线观看一区二区| 一区二区三区.www| 精品久久久久国产| 激情综合在线| 亚洲欧洲成人精品av97| 日本加勒比一区| www..com国产| 国产老女人乱淫免费| 噜噜噜在线视频| 91久久精品久久国产性色也91| 26uuuu精品一区二区| 亚洲乱色熟女一区二区三区| 在线一区二区不卡| 国产传媒欧美日韩成人| 精品无码人妻一区| 欧洲精品码一区二区三区免费看| 国产精品国产三级国产aⅴ9色| 香港日本三级视频| 日韩免费av片| 欧美三级一区| 最新福利小视频在线播放| 日韩一区和二区| 日本黄色一级网站| 在线观看xxxxvideo| 成人在线电影在线观看视频| 免费看黄裸体一级大秀欧美| 亚洲男女一区二区三区| 伊人夜夜躁av伊人久久| eeuss一区二区三区| 看黄在线观看| 国产精品a级| 巨胸喷奶水www久久久| 日本免费在线精品| 波多野结衣电车| 国产精品jk白丝蜜臀av小说| 另类图片亚洲色图| 成人羞羞视频在线看网址| 午夜精品一区二区在线观看的| 国产福利电影| 这里只有精品久久| 欧美疯狂party性派对| 成人免费在线播放视频| 一本一道久久综合狠狠老精东影业| 91在线播放观看| 中文字幕高清在线播放| 性欧美欧美巨大69| 小黄鸭精品aⅴ导航网站入口| av网在线观看| 成人免费网站视频www| 在线能看的av| 黄色免费在线看| 一区二区高清免费观看影视大全| 久久99精品国产麻豆婷婷| 黄色成人在线观看网站| 91午夜精品亚洲一区二区三区| 色欧美片视频在线观看在线视频| 96久久久久久| 国内精品久久久久久影院8f| 亚洲综合自拍一区| 亚洲自拍av在线| 青青青爽在线视频免费观看| 26uuu另类欧美亚洲曰本| 粗暴蹂躏中文一区二区三区| 精品视频全国免费看| 欧美女v视频| 亚洲超碰精品一区二区| 精品少妇一区二区| 欧美free性69| 亚洲国产欧美91| 视频一区二区综合| 狠狠色伊人亚洲综合成人| 国产成人综合视频| 国产一区亚洲一区| 亚洲成a人片777777久久| 自拍偷拍欧美日韩| 美脚丝袜脚交一区二区| www.黄色在线观看| 日本天堂在线观看| 日本国产一区二区| 国产91丝袜美女在线播放| 精品伦理一区二区| 一区二区免费在线播放| 成人的网站免费观看| 国产麻豆精品视频一区二区| 欧美日韩亚洲精品一区二区三区| 制服丝袜亚洲精品中文字幕| 亚洲女优在线观看| 欧美一级视频一区二区| 亚洲天堂av在线播放| 国产一区精品在线| 麻豆精品视频在线| 在线成人激情黄色| 色婷婷av一区二区三区之红樱桃| 最近最新mv在线观看免费高清| 精品乱码亚洲一区二区不卡| 美女日韩一区| 人人鲁人人莫人人爱精品| 欧美日韩一区小说| 免费视频观看成人| 日韩免费福利电影在线观看| 综合久久综合| 欧美在线观看视频一区二区三区| 精品久久久免费视频| 不卡一区二区在线观看| 中文字幕求饶的少妇| 亚洲视频一区二区三区| 成人自拍视频网站| 国产精品久久久久久久久久新婚| 亚洲午夜精品一区 二区 三区| 国产成人精品亚洲精品色欲| 日韩专区视频网站| 在线不卡av电影| 国产精欧美一区二区三区蓝颜男同| xxxxx性欧美特大| 日韩一卡二卡三卡| 欧美久久久久| 亚洲美女福利视频网站| 亚洲欧美日韩精品综合在线观看| 69久久夜色精品国产69| 国产精品电影在线观看| 性高潮久久久久久| 懂色av一区二区三区四区五区| 免费一级suv好看的国产网站| 国产精品免费视频xxxx| 欧美亚洲国产免费| 无罩大乳的熟妇正在播放| 亚洲裸体俱乐部裸体舞表演av| 日韩视频免费中文字幕| 精品国产999| wwwwxxxxx欧美| 精品国产影院| 免费男女羞羞的视频网站中文子暮| 91www在线观看| 亚洲成人最新网站| 中文字幕这里只有精品| 亚洲a视频在线| 欧美日韩成人综合| 久久免费激情视频|