ASPNET 20中的数据操作给新增编辑界面增加验证控件.docx
- 文档编号:30211691
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:25
- 大小:35.88KB
ASPNET 20中的数据操作给新增编辑界面增加验证控件.docx
《ASPNET 20中的数据操作给新增编辑界面增加验证控件.docx》由会员分享,可在线阅读,更多相关《ASPNET 20中的数据操作给新增编辑界面增加验证控件.docx(25页珍藏版)》请在冰豆网上搜索。
ASPNET20中的数据操作给新增编辑界面增加验证控件
ASP.NET2.0中的数据操作:
给新增、编辑界面增加验证控件
WorkingwithDatainASP.NET2.0:
:
AddingValidationControlstotheEditingandInsertingInterfaces
简介
Introduction
在前面三节的示例(译注:
本文完稿时前三节16-18仍在紧张翻译中,而且目前本教程系列46篇只有15篇已经发布,其他原文尚未发布,无法从网络获取)中,GridView和DetailsView控件使用的是绑定列和CheckBoxField(绑定GridView和DetailsView时,通过智能标记可以令VS根据数据库自动增加对应的类型)。
当编辑GridView或者DetailsView中的一行时,非只读属性的绑定列将自动转为textbox,以便用户修改现有的数据。
同样地,当在DetailsView控件中新增记录时,InsertVisible属性为true(默认值)的绑定列会呈现出空的textbox,以接受用户输入。
CheckBoxField列也是如此,通常作为只读的checkbox显示,新增/编辑记录时则可以接受选择。
TheGridViewandDetailsViewcontrolsintheexampleswe’veexploredoverthepastthreetutorialshaveallbeencomposedofBoundFieldsandCheckBoxFields(thefieldtypesautomaticallyaddedbyVisualStudiowhenbindingaGridVieworDetailsViewtoadatasourcecontrolthroughthesmarttag).WheneditingarowinaGridVieworDetailsView,thoseBoundFieldsthatarenotread-onlyareconvertedintotextboxes,fromwhichtheendusercanmodifytheexistingdata.Similarly,wheninsertinganewrecordintoaDetailsViewcontrol,thoseBoundFieldswhoseInsertVisiblepropertyissettotrue(thedefault)arerenderedasemptytextboxes,intowhichtheusercanprovidethenewrecord’sfieldvalues.Likewise,CheckBoxFields,whicharedisabledinthestandard,read-onlyinterface,areconvertedintoenabledcheckboxesintheeditingandinsertinginterfaces.
尽管BoundField和CheckBoxField提供的编辑和添加界面相当有用,却缺乏验证功能。
当用户产生一些数据录入错误――比如遗漏了ProductName字段或者为UnitsInStock输入一个无效值(如-50)――那么应用程序将从底层抛出一个异常。
尽管我们可以很好的处理这个异常像previoustutorial中讨论的,但是,一个完美的‘新增/编辑’用户界面应该包括验证控件,在第一时间阻止用户输入这些无效数据。
WhilethedefaulteditingandinsertinginterfacesfortheBoundFieldandCheckBoxFieldcanbehelpful,theinterfacelacksanysortofvalidation.Ifausermakesadataentrymistake-suchasomittingtheProductNamefieldorenteringaninvalidvalueforUnitsInStock(suchas-50)–anexceptionwillberaisedfromwithinthedepthsoftheapplicationarchitecture.Whilethisexceptioncanbegracefullyhandledasdemonstratedintheprevioustutorial,ideallytheeditingorinsertinguserinterfacewouldincludevalidationcontrolstopreventauserfromenteringsuchinvaliddatainthefirstplace.
为了提供一个自定义的新增/编辑界面,需要将BoundField和CheckBoxField换成模板列(ItemplateField)。
关于模板列,已经在《UsingTemplateFieldsintheGridViewControl和UsingTemplateFieldsintheDetailsViewControl》教程里讨论过了,由几个处理不同行状态的模板组成。
模板列的项模板(ItemTemplate),用来呈现DetailsView或GridView控件中的只读字段或行,而EditItemplate和InsertItemTemplate则分别是编辑和新增模式的界面模板。
Inordertoprovideacustomizededitingorinsertinginterface,weneedtoreplacetheBoundFieldorCheckBoxFieldwithaTemplateField.TemplateFields,whichwerethetopicofdiscussionintheUsingTemplateFieldsintheGridViewControlandUsingTemplateFieldsintheDetailsViewControltutorials,canconsistofmultipletemplatesdefiningseparateinterfacesfordifferentrowstates.TheTemplateField’sItemTemplateisusedtowhenrenderingread-onlyfieldsorrowsintheDetailsVieworGridViewcontrols,whereastheEditItemTemplateandInsertItemTemplateindicatetheinterfacestousefortheeditingandinsertingmodes,respectively.
在本节教程中,你会发现为模板列的EditItemTemplate和InsertItemTemplate提供验证控件来提供更健壮的用户界面是多么的简单。
明确一点,本节教程采用《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》中创建的示例代码,来增加新增/编辑时的相关验证。
Inthistutorialwe’llseehoweasyitistoaddvalidationcontrolstotheTemplateField’sEditItemTemplateandInsertItemTemplatetoprovideamorefoolproofuserinterface.Specifically,thistutorialtakestheexamplecreatedintheExaminingtheEventsAssociatedwithInserting,Updating,andDeletingtutorialandaugmentstheeditingandinsertinginterfacestoincludeappropriatevalidation.
一、复制《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》的示例代码
Step1:
ReplicatingtheExamplefromExaminingtheEventsAssociatedwithInserting,Updating,andDeleting
在《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》教程中我们创建了一个页面,并在一个可编辑的GridView中列表显示产品的名字和价格。
页面还有一个DetailsView,DefaultMode属性设置成Insert,因此始终呈现为新增模式。
通过DetailsView,用户可以录入名字和价格增加新的产品,点击Insert后,新产品就被增加到系统里(见图1)。
IntheExaminingtheEventsAssociatedwithInserting,Updating,andDeletingtutorialwecreatedapagethatlistedthenamesandpricesoftheproductsinaneditableGridView.Additionally,thepageincludedaDetailsViewwhoseDefaultModepropertywassettoInsert,therebyalwaysrenderingininsertmode.FromthisDetailsView,theusercouldenterthenameandpriceforanewproduct,clickInsert,andhaveitaddedtothesystem(seeFigure1).
图1:
以前的代码允许用户增加新的产品或修改已有的产品
Figure1:
ThePreviousExampleAllowsUserstoAddNewProductsandEditExistingOnes
本节教程的目标是为DetailsView和GridView提供验证控件。
更精确一些,此验证逻辑将是:
OurgoalforthistutorialistoaugmenttheDetailsViewandGridViewtoprovidevalidationcontrols.Inparticular,ourvalidationlogicwill:
∙新增/编辑产品时name为必填项
∙新增记录时price为必填项;编辑时依然需要价格,并且在GridView的RowUpdating事件处理中应用上节教程previoustutorial中的程序逻辑
∙确保输入的price是有效的货币格式
∙Requirethatthenamebeprovidedwheninsertingoreditingaproduct
∙Requirethatthepricebeprovidedwheninsertingarecord;wheneditingarecord,wewillstillrequireaprice,butwillusetheprogrammaticlogicintheGridView’sRowUpdatingeventhandleralreadypresentfromtheearliertutorial
∙Ensurethatthevalueenteredforthepriceisavalidcurrencyformat
在考虑为前面代码增加验证之前,我们首先需要复制上节教程previoustutorial示例DataModificationEvents.aspx中的代码到本节教程的UIValidation.aspx页面上。
要完成此点需要复制DataModificationEvents.aspx页面的元素标记和它的后台代码。
先按下面步骤拷贝元素标记:
Beforewecanlookataugmentingthepreviousexampletoincludevalidation,wefirstneedtoreplicatetheexamplefromtheDataModificationEvents.aspxpagetothepageforthistutorial,UIValidation.aspx.ToaccomplishthisweneedtocopyoverboththeDataModificationEvents.aspxpage’sdeclarativemarkupanditssourcecode.Firstcopyoverthedeclarativemarkupbyperformingthefollowingsteps:
1.在VisualStudio中打开DataModificationEvents.aspx
2.转到页面的源视图(单击页面底部的源(Source)按钮)
3.拷贝 Content>至
Content>标记间的文本(3到44行),见图2。
图2:
拷贝 Content>控件中的文本 4.打开UIValidation.aspx页 5.转到页面的源视图 6.粘贴文本到 Content>控件 1.OpentheDataModificationEvents.aspxpageinVisualStudio 2.Gotothepage’sdeclarativemarkup(clickontheSourcebuttonatthebottomofthepage) 3.Copythetextwithinthe Content>and Content>tags(lines3through44),asshowninFigure2. Figure2: CopytheTextWithinthe Content>Control 4.OpentheUIValidation.aspxpage 5.Gotothepage’sdeclarativemarkup 6.Pastethetextwithinthe Content>control. 然后打开代码文件DataModificationEvents.aspx.cs,拷贝EditInsertDelete_DataModificationEvents类中的代码,及3个事件处理(Page_Load,GridView1_RowUpdating,和ObjectDataSource1_Inserting),注意不要把类声明和using语句也拷贝过来,然后将它们粘贴到UIValidation.aspx.cs中的EditInsertDelete_UIValidation里。 Tocopyoverthesourcecode,opentheDataModificationEvents.aspx.cspageandcopyjustthetextwithintheEditInsertDelete_DataModificationEventsclass.Copythethreeeventhandlers(Page_Load,GridView1_RowUpdating,andObjectDataSource1_Inserting),butdonotcopytheclassdeclarationorusingstatements.PastethecopiedtextwithintheEditInsertDelete_UIValidationclassinUIValidation.aspx.cs. 上面的工作完成后,不要急着动手,先砌杯茶在浏览器里查看一下是否有误,这两个页面应该具有同样的输出和功能。 (参照图1,DataModificationEvents.aspx运行时的抓图) AftermovingoverthecontentandcodefromDataModificationEvents.aspxtoUIValidation.aspx,takeamomenttotestoutyourprogressinabrowser.Youshouldseethesameoutputandexperiencethesamefunctionalityineachofthesetwopages(referbacktoFigure1forascreenshotofDataModificationEvents.aspxinaction). 二、将绑定列转换为模板列 Step2: ConvertingtheBoundFieldsIntoTemplateFields 要增加验证控件到新增/编辑界面,DetailsView和GridView必须将绑定列转换为模板列。 要实现此转换,先点击GridView的智能标记(译者: GridView右上角的箭头),再选择‘编辑列…’(EditColumns),在左边依次选择绑定字段并点击‘将此字段转换为TemplateField’链接(英文版是ConvertthisfieldintoaTemplateField,下同)。 Toaddvalidationcontrolstotheeditingandinsertinginterfaces,theBoundFieldsusedbytheDetailsViewandGridViewcontrolsneedtobeconvertedintoTemplateFields.Toachievethis,clickontheEditColumnsandEditFieldslinksintheGridViewandDetailsView’ssmarttags,respectively.There,selecteachoftheBoundFieldsandclickthe“ConvertthisfieldintoaTemplateField”link. 图3: 将DetailsView和GridView的绑定列转换为模板列 Figure3: ConvertEachoftheDetailsView’sandGridView’sBoundFieldsIntoTemplateFields 通过刚才操作的字段(英文版是Fields)对话框,绑定列可以转换为模板列,同样拥有了只读,编辑,新增等原有功能。 下面的代码显示了DetailsView中转换为模板列后的ProductName字段的元素标记: ConvertingaBoundFieldintoaTemplateFieldthroughtheFieldsdialogboxgeneratesaTemplateFieldthatexhibitsthesameread-only,editing,andinsertinginterfacesastheBoundFielditself.ThefollowingmarkupshowsthedeclarativesyntaxfortheProductNamefieldintheDetailsViewafterithasbeenconvertedintoaTemplateField: TemplateFieldHeaderText="ProductName"SortExpression="ProductName"> TextBoxID="TextBox1"runat="server"Text='<%#Bind("ProductName")%>'> TextBox> TextBoxID="TextBox1"runat="server"Text='<%#Bind("ProductName")%>'> TextBox> LabelID="Label1"runat="server"Text='<%#Bind("ProductName")%>'> Label> TemplateField> 注意该模板列自动创建了三个模板列,ItemTemplate,EditItemTemplate以及InsertItemTemplate。 项模板ItemTemplate使用LabelWeb控件简单显示字段值(ProductName),而EditItemTemplate和InsertItemTemplate则使用TextBox控件并利用其Text属性来处理相关的数据。 由于我们在页面上只使用DetailsView实现新增,你可以删除ItemTemplate和EditItemTemplate,当然留着也无关紧要。 NotethatthisTemplateFieldhadthreetemplatesautomaticallycreated–ItemTemplate,EditItemTemplate,andInsertItemTemplate.TheItemTemplatedisp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASPNET 20中的数据操作给新增编辑界面增加验证控件 20 中的 数据 操作 新增 编辑 界面 增加 验证 控件