首页 ASP.NET网站开发架构.pdf

ASP.NET网站开发架构.pdf

ASP.NET网站开发架构.pdf

上传者: goodlook6 2012-02-20 评分1 评论0 下载642 收藏0 阅读量1421 暂无简介 简介 举报

简介:本文档为《ASP.NET网站开发架构pdf》,可适用于IT行业分析领域,主题内容包含进入第章:第章ASPNET的安全性一学就会ASPNET网络编程学习笔记:一学就会ASPNET网络编程学习笔记本章内容包括: 建立一个Web自定义控件符等。

进入第章:第章ASPNET的安全性一学就会ASPNET网络编程学习笔记:一学就会ASPNET网络编程学习笔记本章内容包括: 建立一个Web自定义控件以及如何将自 定义控件应用到具体的Web项目中。  如何给一个控件创建子控件。  使用控件分析器来简化子控件标记的代码  并说明控件分析器的完整执行过程。  编写一个简单的复合控件。进入第章在ASPNET中提供了Web用户控件的功能支持。使用控件可以减少页面代码并且具有易于维护的好处。不过Web用户控件必须随带一个扩展名为“ascx”的文件所以在部署上比较麻烦。在本章中将介绍另外一种相对灵活且强大的控件建立方式“Web自定义控件”。在本章中我们将学习Web自定义控件开发的关键技术通过本章的学习读者将熟悉Web自定义控件的基本开发过程、控件的子控件创建过程以及复合控件的编写。拉开崭新的学习帷幕第章ASPNET网站开发架构ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记BS架构设计理念随着计算机网络技术的快速发展网络带宽的逐步稳定和不断提升基于BS(BrowserServer)体系的应用软件得到了迅速发展。与传统的CS(ClientServer)体系的应用软件相比其最大的不同是:BS体系的应用软件使用网络浏览器作为与用户交互的平台而CS则需要开发专用的应用程序。基于BS体系的软件系统有以下几个优点:简化客户端方便安装和部署。它不需要像CS系统那样在多个计算机上安装同样的客户端应用程序而只是需要安装常用的Web浏览器。这样除去可以节省计算机硬盘空间之外还降低了用户使用软件的难度。便于开发和维护在修改了应用程序的运行逻辑后不需要提示用户必须更新浏览器。而传统的CS系统则必须强制用户更新客户端程序。BS系统可以建立在目前任意的一个可靠的服务器软件平台之上(例如IIS)。而传统的CS则可能需要编写独立的服务器软件整个系统的可靠性无法得到保证。Web浏览器是基于简单的HTTP协议。而传统的CS可以自己定制通信协议但各个协议之间可能不易协调而造成冲突。另外BS系统与CS系统的架构方式也会有所不同CS比较常见的是使用两层架构而BS则是三层架构。从本章节开始将讨论多层架构的问题。单层设计架构本节以一个简单的留言板程序来说明单层结构的特征。首先对该程序作一个简单的介绍留言板解决方案名称为TraceLWord解决方案中只有一个Web项目该项目中只有两个页面:ListLWordaspx列表显示数据库中的每条留言所对应的后台程序文件是ListLWordaspxcs。PostLWordaspx发送留言到数据库所对应的后台程序文件是PostLWordaspxcs。留言板所访问的数据库是TraceLWordDBmdb可以在本书光盘中找到。其中包含两张数据表RegUser注册用户数据表和LWord留言信息数据表。两张数据表的具体结构分别如表和表所示:表RegUser注册用户数据表字段名称数据类型备注说明RegUserID自动编号注册用户编号NickName文本长度=用户昵称PassWord文本长度=登陆密码表LWord留言信息数据表字段名称数据类型备注说明LWordID自动编号留言记录编号FromUser文本长度=留言发送人名称ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记下面给出留言板的部分代码完整代码可以在随书附带的光盘中找到。usingSystemusingSystemDatausingSystemDataOleDbusingSystemConfigurationusingSystemWebusingSystemWebUIWebControlsnamespaceTraceLWordWebUI{publicpartialclassListLWord:SystemWebUIPage{留言列表控件protectedSystemWebUIWebControlsRepeatermaspLWordListprotectedvoidPageLoad(objectsender,EventArgse){thisLWordsDataBind()}获取所有留言信息privateconststringSQLGetAllLWords="SELECT*FROMLWordORDERBYLWordIDDESC"绑定留言信息privatevoidLWordsDataBind(){OleDbConnectiondbConn=newOleDbConnection(ConfigurationManagerConnectionStrings"TraceLWordDB"ConnectionString)OleDbDataAdapterdbAdp=newOleDbDataAdapter(SQLGetAllLWords,dbConn)DataSetds=newDataSet()dbAdpFill(ds,"LWordList")thismaspLWordListDataSource=dsTables"LWordList"DefaultViewthismaspLWordListDataBind()}}}在页面加载的时候绑定留言信息在节介绍二层架构时被括号包含的代码会加以改动注意:数据绑定以后会在页面中显示出来下面给出留言板的部分代码完整代码可以在随书附带的光盘中找到。usingSystemDataOleDbusingSystemConfigurationListLWordaspx部分页面代码:<asp:Repeaterrunat="server"ID="maspLWordList"><ItemTemplate><#DataBinderEval(ContainerDataItem,"FromUser")>,<#DataBinderEval(ContainerDataItem,"PostTime")><#DataBinderEval(ContainerDataItem,"TextContent")><ItemTemplate><asp:Repeater>控件在代码文件中的定义ListLWordaspxcs代码:字段名称数据类型备注说明TextContent备注留言内容PostTime日期时间留言发送时间默认值为当前时间ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记PostLWordaspx部分页面代码:用户昵称:<asp:TextBoxrunat="server"ID="maspNickName">用户密码:<asp:TextBoxrunat="server"ID="maspPassWord"TextMode="Password">……<asp:TextBoxrunat="server"ID="maspTextContent"TextMode="MultiLine"Rows=""Columns="">……<asp:Buttonrunat="server"ID="maspPostCmd"Text="发送留言"PostLWordaspxcs代码:usingSystemusingSystemDatausingSystemDataOleDbusingSystemConfigurationusingSystemWebusingSystemWebUIWebControlsnamespaceTraceLWordWebUI{publicpartialclassPostLWord:SystemWebUIPage{用户昵称DataBinderEval(ContainerDataItem,"PostTime")DataBinderEval(ContainerDataItem,"FromUser")DataBinderEval(ContainerDataItem,"TextContent")图留言列表页面当用户请求ListLWordaspx页面时PageLoad会得到调用。在PageLoad函数中又调用了LwordsDataBind函数来绑定留言信息列表。页面的执行结果如图所示:<asp:TextBoxrunat="server"ID="maspTextContent"ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记protectedSystemWebUIWebControlsTextBoxmaspNickName用户密码protectedSystemWebUIWebControlsTextBoxmaspPassWord留言内容protectedSystemWebUIWebControlsTextBoxmaspTextContent发送命令按钮protectedSystemWebUIWebControlsButtonmaspPostCmdprotectedvoidPageInit(objectsender,EventArgse){thismaspPostCmdClick=newEventHandler(PostCmdClick)}获取注册用户信息privateconststringSQLGetRegUser="SELECT*FROMRegUserWHERENickName=NickName"注册新用户privateconststringSQLRegister="INSERTINTORegUser(NickName,PassWord)VALUES(NickName,PassWord)"发送新留言privateconststringSQLPostLWord="INSERTINTOLWord(FromUser,TextContent)VALUES(FromUser,TextContent)"发送留言信息到数据库privatevoidPostCmdClick(objectsender,EventArgse){获取用户昵称stringnickName=thismaspNickNameText获取用户密码stringpassWord=thismaspPassWordText获取留言内容stringtextContent=thismaspTextContentText用户昵称和密码不能为空if(StringIsOrEmpty(nickName)||StringIsOrEmpty(passWord))thrownewException("用户昵称或密码为空")留言内容不能为空if(StringIsOrEmpty(textContent))thrownewException("留言内容为空")用户是否已注册boolisRegistered=false存于数据库中的用户密码stringpassWordInDB=OleDbConnectiondbConn=newOleDbConnection(ConfigurationManagerConnectionStrings"TraceLWordDB"ConnectionString)OleDbCommandgetRegUserDBCmd=newOleDbCommand(SQLGetRegUser,dbConn)设置用户昵称protectedSystemWebUIWebControlsTextBoxmaspTextContentASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记getRegUserDBCmdParametersAdd("NickName",OleDbTypeVarWChar,)Value=nickNametry{dbConnOpen()OleDbDataReaderdr=getRegUserDBCmdExecuteReader()if(drRead()){isRegistered=true获取存于数据库中的用户密码passWordInDB=ConvertToString(dr"PassWord")}}catch(Exceptionex){throwex}finally{dbConnClose()}if(isRegistered){如果用户已经注册则比较用户密码if(StringCompare(passWord,passWordInDB)!=)thrownewException("用户密码错误")如果密码相同则添加留言信息OleDbCommandpostLWordDBCmd=newOleDbCommand(SQLPostLWord,dbConn)设置留言发送人昵称postLWordDBCmdParametersAdd("FromUser",OleDbTypeVarWChar,)Value=nickName设置留言内容postLWordDBCmdParametersAdd("TextContent",OleDbTypeLongVarWChar)Value=textContenttry{dbConnOpen()postLWordDBCmdExecuteNonQuery()}catch(Exceptionex){throwex}finally{dbConnClose()}}else{如果用户名称不存在那么首先注册新用户之后添加留言信息首先判断用户名称是否已经存在。如果已经存在那么在验证用户密码成功之后添加留言信息ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记如果用户未注册那么先注册新用户然后添加留言dbConnOpen()try{OleDbCommandregisterDBCmd=newOleDbCommand(SQLRegister,dbConn)设置用户昵称registerDBCmdParametersAdd("NickName",OleDbTypeVarWChar,)Value=nickName设置用户密码registerDBCmdParametersAdd("PassWord",OleDbTypeVarWChar,)Value=passWordregisterDBCmdExecuteNonQuery()  OleDbCommandpostLWordDBCmd=newOleDbCommand(SQLPostLWord,dbConn)设置留言发送人昵称postLWordDBCmdParametersAdd("FromUser",OleDbTypeVarWChar,)Value=nickName设置留言内容postLWordDBCmdParametersAdd("TextContent",OleDbTypeLongVarWChar)Value=    textContentpostLWordDBCmdExecuteNonQuery()}  catch(Exceptionex){throwex}finally{dbConnClose()}}跳转到留言显示页面ResponseRedirect("ListLWordaspx",true)}}  }留言发送完成以后应用程序会回转到留言列表页面被括号括中的代码在节介绍二层结构时会加以改动。注意:节介绍二层ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记当用户发送新留言时系统会要求用户输入用户名称和用户密码。在获取到用户名称之后系统会对用户名称进行验证。如果该用户名称可以在数据库中找到那么系统会继续验证用户密码。只有当密码与数据库中存放的用户密码完全相同时才将新的留言信息插入到数据库中。在验证用户名称的过程中如果没有在数据库中找到该用户名称也就是说用户是一个新来者那么首先为该用户注册一个新的账户之后再将留言信息插入到数据库。简要地说就是当用户第一次留言时为用户注册。发送留言的流程如图所示:PostLWordaspx页面如图所示:否是是获取注册用户信息用户已经存在发送留言发送留言注册新用户图发送新留言流程图图留言发送页面ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记单层结构的应用程序比较简单所有代码都写在后台文件中这非常类似于ASP编程方式。下一小节将会在这些代码的基础上提炼出二层架构。二层设计架构如果将TraceLWord中所有操作数据库的代码全部提炼出来放入到另外一个类文件里以供统一调用那就是简单的二层架构!箭头表示的是依赖方向即ListLWord类需要调用OleDbAdapter和OleDbConnection两个类才能完成任务如图所示在TraceLWord中ListLWord和PostLWord两个页面类都调用了数据库操作类OleDbConnection、OleDbAdapter和OleDbCommand。为了实现简单的二层结构可以建立一个“中介者类”使两个页面类摆脱对数据库操作类的直接调用如图所示。OleDbAdapterOleDbConnectionOleDbCommandListLWordPostLWord图TraceLWord中各个类之间的依赖关系图加入中介者类之后各个类的依赖关系“中介者类”使两个页面类摆脱对数据库操作类的直接调用如图所示。“中介者类”使两个页面类摆脱对数据库操作类的直接调用如图所示。ListLWordPostLWord中介者OleDbConnectionOleDbAdapterOleDbCommand新建的DBTask类将充当这个中介者ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记在新建的TraceLWord解决方案中添加了类DBTask充当“中介者”其代码内容如下:usingSystemusingSystemConfigurationusingSystemDatausingSystemDataOleDbnamespaceTraceLWordWebUI{publicclassDBTask{获取所有留言信息privateconststringSQLGetAllLWords="SELECT*FROMLWordORDERBYLWordIDDESC"发送新留言privateconststringSQLPostLWord="INSERTINTOLWord(FromUser,TextContent)VALUES(FromUser,TextContent)"获取注册用户信息privateconststringSQLGetRegUser="SELECT*FROMRegUserWHERENickName=NickName"注册新用户privateconststringSQLRegister="INSERTINTORegUser(NickName,PassWord)VALUES(NickName,PassWord)"获取留言信息publicDataSetListLWord(){OleDbConnectiondbConn=thisCreateConnection()OleDbDataAdapterdbAdp=newOleDbDataAdapter(SQLGetAllLWords,dbConn)DataSetds=newDataSet()dbAdpFill(ds,"LWordList")returnds}发送新留言publicvoidPostLWord(stringnickName,stringtextContent){OleDbConnectiondbConn=thisCreateConnection()OleDbCommanddbCmd=newOleDbCommand(SQLPostLWord,dbConn)设置留言发送人昵称dbCmdParametersAdd("FromUser",OleDbTypeVarWChar,)Value=nickName设置留言内容dbCmdParametersAdd("TextContent",OleDbTypeLongVarWChar)Value=textContenttry{dbConnOpen()dbCmdExecuteNonQuery()}catch(Exceptionex){throwex}finally{dbConnClose()将TraceLWord中用于获取留言信息的代码提取到这个函数将TraceLWord中用于发送留言信息的代码提取到这个函数ASPNET网络编程学习笔记ok出片文件indd::将TraceLWord中用于注册用户信息的代码提取到这个函数:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记}}获取注册用户信息publicDataSetGetRegUser(stringnickName){OleDbConnectiondbConn=thisCreateConnection()OleDbDataAdapterdbAdp=newOleDbDataAdapter(SQLGetRegUser,dbConn)设置用户昵称dbAdpSelectCommandParametersAdd("NickName",OleDbTypeVarWChar,)Value=nickNameDataSetds=newDataSet("RegUserDS")dbAdpFill(ds,"RegUser")returnds}注册新用户publicvoidRegister(stringnickName,stringpassWord){OleDbConnectiondbConn=thisCreateConnection()OleDbCommandregisterDBCmd=newOleDbCommand(SQLRegister,dbConn)try{设置用户昵称registerDBCmdParametersAdd("NickName",OleDbTypeVarWChar,)Value=nickName设置用户密码registerDBCmdParametersAdd("PassWord",OleDbTypeVarWChar,)Value=passWordregisterDBCmdExecuteNonQuery()}catch(Exceptionex){throwex}finally{dbConnClose()}}建立数据库连接privateOleDbConnectionCreateConnection(){returnnewOleDbConnection(ConfigurationManagerConnectionStrings"TraceLWordDB"ConnectionString)}}}将TraceLWord中用于获取用户信息的代码提取到这个函数DBTask类只是把原来散落在页面上的关于数据库访问的代码全部都集结在一起然后提供不同的功能函数以供页面调用。这是给TraceLWord代码加上了一层包装。那么相应的也要修改ListLWordaspxcs和PostLWordaspxcs这两个文件:ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记绑定留言信息privatevoidLWordsDataBind(){thismaspLWordListDataSource=(newDBTask())ListLWord()thismaspLWordListDataBind()}发送留言信息到数据库privatevoidPostCmdClick(objectsender,EventArgse){获取用户昵称stringnickName=thismaspNickNameText获取用户密码stringpassWord=thismaspPassWordText获取留言内容stringtextContent=thismaspTextContentText用户昵称和密码不能为空if(StringIsOrEmpty(nickName)||StringIsOrEmpty(passWord))thrownewException("用户昵称或密码为空")留言内容不能为空if(StringIsOrEmpty(textContent))thrownewException("留言内容为空")建立数据库任务实例DBTaskdbTask=newDBTask()获取注册用户信息DataSetds=dbTaskGetRegUser(nickName)if(ds!=dsTablesCount>dsTablesRowsCount>){如果用户已注册则验证用户密码if((string)dsTablesRows"PassWord"!=passWord)thrownewException("用户密码错误")}else{用户未注册则注册新用户dbTaskRegister(nickName,passWord)}插入新留言信息dbTaskPostLWord(nickName,textContent)跳转到留言显示页面ResponseRedirect("ListLWordaspx",true)}与TraceLWord不同这里建立了DBTask类对象并调用其中的ListLWord方法而不是直接出现数据库代码这里也是通过DBTask类对象来访问数据库而不是直接出现数据库代码ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记收缩上面的代码就可以看到下面的调用形式(以显示留言信息为例):收缩上面的代码就可以看到下面的调用形式(以显示留言信息为例):绑定留言信息位于ListLWordaspxcs文件privatevoidLWordsDataBind(){thismaspLWordListDataSource=(newDBTask())ListLWord()thismaspLWordListDataBind()}获取留言信息位于DBTaskcs文件publicDataSetListLWord(){……}在上述代码中使用DBTask类作为中介者这满足了“设计模式”中的一个重要原则:“迪米特法则”。该法则的主旨是:让一个类尽量少地与其他的类发生联系。在TraceLWord中两个页面类都与数据库操作类发生了联系所以它破坏了“迪米特法则”。其坏处是:如果数据库操作类发生变化会造成两个页面类也要做出相应的变化。这种连锁反应式的变化会增加软件的维护成本所以是多余的、不必要的。在TraceLWord中利用一个“中介者”类抵消这种变化影响而这个“中介者”类其实就是“门面模式”中的“门面”。门面模式要解决这样的一个问题:如果众多类之间存在关联从而形成一张关系网如图所示。那么当其中一个类被修改的时候很可能会导致这张网中的其他类也要随之修改这增加了软件的维护难度。为了避免这样的问题出现所以引入一个“中介者”类并且令所有类都只与这个中介者类进行通信如图所示。这样当其中一个类修改的时候只修改这个中介者类就可以了并不会导致其他类也要随之修改这样也就降低了软件的维护难度。当其中一个类发生改变时会导致其他类也要随之改变ClassClassClassClassClass图各个类之间的网状联系{thismaspLWordListDataSource=(newDBTask())ListLWord()thismaspLWordListDataBind()}ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记加入中介者类之后解除了各类之间复杂的依赖关系也就避免了牵一发而动全身的问题Class图加入中介者类三层设计架构在TraceLWord中虽然可以通过中介者DBTask类使两个页面类摆脱对数据库操作类的依赖但是在页面类中还存留一些对留言规则描述的代码。如果将这些代码也提炼出来放入到另外一个类文件里以供统一调用形成一个专门用于规则描述的类如图所示。这样在代码组织上就形成了页面代码、规则描述代码、数据库操作代码的格局这就是简单的三层结构!在TraceLWord中将使用InterService类来描述规则ListLWordPostLWord规则描述DBTaskOleDbConnectionOleDbAdapterOleDbCommand图加入规则描述中介者类ClassClassClassClassASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记在新建的TraceLWord中添加了类InterService来描述留言规则。关于留言规则,简要地说就是当用户第一次留言时为用户注册。将TraceLWord中有关留言信息获取和留言发送部分的代码剪切出来并粘贴到一个新类里这就是InterService。其代码如下:usingSystemusingSystemDatanamespaceTraceLWordWebUI{publicclassInterService{获取留言信息publicDataSetListLWord(){return(newDBTask())ListLWord()}发送留言信息到数据库publicvoidPostLWord(stringnickName,stringpassWord,stringtextContent){  用户昵称和密码不能为空if(StringIsOrEmpty(nickName)||StringIsOrEmpty(passWord))thrownewException("用户昵称或密码为空")留言内容不能为空if(StringIsOrEmpty(textContent))thrownewException("留言内容为空")获取注册用户信息DataSetds=thisGetRegUser(nickName)if(ds!=dsTablesCount>dsTablesRowsCount>){如果用户已注册则验证用户密码if((string)dsTablesRows"PassWord"!=passWord)thrownewException("用户密码错误")}else{用户未注册则注册新用户thisRegister(nickName,passWord)}插入新留言信息(newDBTask())PostLWord(nickName,textContent)}获取注册用户信息publicDataSetGetRegUser(stringnickName){return(newDBTask())GetRegUser(nickName)}注册新用户publicvoidRegister(stringnickName,stringpassWord){(newDBTask())Register(nickName,passWord)在TraceLWord中是不是可以找到类似的代码呢?publicvoidRegister(stringnickName,stringpassWord)在规则描述中需要建立DBTask类对象来访问数据库而不是直接出现数据库代码ASPNET网络编程学习笔记ok出片文件indd:::第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记:第章ASPNET网站开发架构一学就会ASPNET网络编程学习笔记在InterService类中定义了PostLWord函数。该函数封装了发送新留言的处理逻辑而该逻辑原来出现在页面中。接下来要修改ListLWordaspxcs和PostLWordaspxcs这两个文件:绑定留言信息privatevoidLWordsDataBind(){thismaspLWordListDataSource=(newInterService())ListLWord()thismaspLWordListDataBind()}发送留言信息到数据库privatevoidPostCmdClick(objectsender,EventArgse){获取用户昵称stringnickName=thismaspNickNameText获取用户密码stringpassWord=thismaspPassWordText获取留言内容stringtextContent=thismaspTextContentText发送留言信息(newInterService())PostLWord(nickName,passWord,textContent)跳转到留言显示页面ResponseRedirect("ListLWordaspx",true)}与TraceLWord不同这里建立了InterService类对象并调用其中的ListLWord方法与TraceLWord不同这里也是建立了InterService类对象并调用其中的PostLWord方法。在该方法中描述了留言规则}}}收缩上面的代码就可以看到下面的调用形式(以显示留言信息为例):绑定留言信息位于ListLWordaspxcs文件privatevoidLWordsDataBind(){thismaspLWordListDataSource=(newInterService())ListLWord()thismaspLWordListDataBind()}获取留言信息位于InterServicecs文件publicDataSetListLWord(){return(newDBTask())ListLWord()}获取留言信息位于DBTaskcs文件publicDataSetListLWord(){……}ASPNET网络编程学习笔记ok出片文件indd

职业精品

(汽车)产品营销策划书范文.doc

HH牙膏营销方案策划书.doc

加班管理人力资源考勤管理系统方案.doc

物品采购管理制度-正式.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 0
所需积分:0 立即下载

意见
反馈

返回
顶部