网络新闻发布系统_第1页
网络新闻发布系统_第2页
网络新闻发布系统_第3页
网络新闻发布系统_第4页
网络新闻发布系统_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第页TOC\o"1-5"\h\z\u项目5建立网站新闻发布系统 5目标: 5任务1发布新闻 55.1.1任务描述 55.1.2任务分析 65.1.3相关知识 61、建立静态类 6(1)对象分析 6(2)属性分析 6(3)定义新闻类 7(4)建立新闻类 72、建立新闻数据表 83、建立添加新闻的存储过程 94、建立添加新闻的数据访问层 105、建立添加新闻操作的业务逻辑层 116、建立新闻分类的数据访问层 117、建立新闻分类的业务逻辑层 138、发布新闻操作的界面 13(1)发布新闻的界面设计 13(2)发布新闻的后台代码 165-1-4任务实施 195-1-5任务拓展 20任务2配置和应用FCKEditor编辑器 205.2.1任务描述 205.2.2任务分析 205.2.3相关知识 201、配置FCKEditor编辑器 20(1)FCKEditor简介 20(2)下载FCKeditor 21(3)引用FredCK.FCKeditorV2.dll文件 21(4)把FCKeditor控件添加到VisualStudio2008的工具箱中 21(5)在WebConfig配置FCKeditor所需的参数 22(6)FCKeditor详细的设置 22(7)FCKeditor的精简 232、应用FCKEditor编辑器 24(1)把FCKEditor编辑器控件添加到网页中 24(2)读取FCKeditor编辑器中的内容 255.2.4任务实施 255.2.5任务拓展 26任务3显示新闻内容 265.3.1任务描述 265.3.2任务分析 265.3.3相关知识 261、新建读取新闻的存储过程 262、在数据访问层添加读取新闻的方法 273、在业务逻辑层添加读取新闻的方法 294、新建显示新闻列表的网页 29(1)建立新闻列表页 29(2)新闻列表页面规划 29(3)新闻列表页面代码 31(4)新闻列表的后台代码 34(5)测试新闻列表页的浏览效果 345、新建显示新闻内容的网页 35(1)新建显示新闻内容的网页,并设计该页的布局 35(2)设计显示新闻的样式 35(3)设计最清晰的动态样式 36(4)显示新闻网页的具体代码 36(5)显示新闻内容的后台代码 37(6)显示结果 386、分页显示新闻内容 39(1)分页新闻显示的必要性 39(2)修改FCKeditor的分页功能 39(3)新建按设定字符串分页的函数 40(4)修改显示新闻的后台代码 41(5)最终显示的分页效果 417、应用搜索引擎的排名规则 41(1)编写搜索引擎最关注的内容 41(2)新建一个网站配置的简单对象 41(3)新建网站配置数据表 42(4)新建读取网站配置的存储过程 42(5)新建读取网站配置的数据访问层对象 42(5)新建读取网站配置的业务逻辑层对象 43(6)去HTML标记函数 44(7)截取固定长度的字符串函数 45(8)网页标题、关键字和描述的构成 45(9)提示搜索引擎搜索该页 455.3.4任务实施 465.3.5任务拓展 47任务4修改和删除新闻 475.4.1任务描述 475.4.2任务分析 475.4.3相关知识 475.4.4任务实施 475.4.5任务拓展 47任务5静态显示新闻 475.5.1任务描述 485.5.2任务分析 485.5.3相关知识 481、把指定动态网页的内容全部读取到内存 48(1)取得动态网页的绝对网址 48(2)下载指定动态网页的内容 482、打开一个文本文件 493、把内存中的数据写入到打开的文件 494、什么时候把动态发布的新闻静态化 505、修改添加新闻的网页,在添加新闻时生成静态网页 505.5.4任务实施 515.5.5任务拓展 51任务6应用jQuery添加动态样式 515.6.1任务描述 515.6.2任务分析 515.6.3相关知识 511、jQuery简介、下载与引用 512、jQuery选择器 52(1)最简单的jQuery应用 52(2)定义选中新闻内容的jQuery选择器 53(3)设计选定对象应用的样式 533、jQuery的事件处理 53(1)为特定元素应用事件 53(2)jQuery中的ready事件 54(3)鼠标悬停事件 544、jQuery的事件处理添加到哪里最合适 545、应用jQuery后的效果 555.6.4任务实施 555.6.5任务拓展 56任务7利用Ajax更新静态网页的点击次数身 565.7.1任务描述 565.7.2任务分析 565.7.3相关知识 561、Ajax简介 562、新建更新浏览次数的动态网页 573、XMLHttpRequest对象 57(1)XMLHttpRequest对象简介 57(2)创建XMLHttpRequest对象 584、建立要连接的URL 585、打开到服务器的连接 596、定义回调函数 597、发出请求 618、测试运行效果 615.7.4任务实施 625.7.5任务拓展 62任务8在新闻页插入广告 625.8.1任务描述 625.8.2任务分析 625.8.3相关知识 621、建立随机读取一个产品的存储过程 622、建立读取随机产品信息的数据访问层 633、建立读取随机产品信息的业务逻辑层 634、新建一个生成产品广告的方法 645、修改显示新闻的后台代码 646、测试广告效果 645.8.4任务实施 655.8.5任务拓展 65任务9给新闻页添加热点聚焦 655.9.1任务描述 655.9.2任务分析 655.9.3相关知识 661、编写自定义控件 662、动态更新热点聚焦数据 72(1)定义热点聚焦的XML数据源文件 72(2)新建管理热点聚焦数据源的网页 733、把热点聚焦控件添加到显示新闻的网页 774、建立用户控件 775、将热点聚焦用户控件添加到显示新闻的网页中 786、热点聚焦控件的显示效果 795.9.4任务实施 795.9.5任务拓展 79小结 79

项目5建立网站新闻发布系统信息发布是网络营销的发动机。《左传·襄公二十五年》“仲尼曰:‘言以足志,文以足言。不言,谁知其志?言之无文,行而不远。’”既强调了宣传的重要也强调了内容的重要。在“酒香也怕巷子深”的时代,不言,谁知你是谁?不言,谁知你有什么产品?必须宣传企业、产品与服务,宣传才能提高暴光率,宣传才能保持你与顾客的接触率。买东西,有人只买贵的,不买对的;有人只买对的,不买贵的;其实都只能买他知道的产品,根本不可能买不知道的产品。目前,在产能过盛,同质化严重的市场上,不论你的产品力多强,你不去宣传,都没戏。只有想办法把产品的利益传播到顾客的心里,让利益占领顾客的心智,营销才能成功。怎么才能让利益占领顾客的心智呢?就是信息发布。因此,信息发布是网络营销的发动机。发布独特信息才能有好的搜索引擎排名。有网站而没有好的搜索引擎排名,就不能有效开展电子商务。甚至可以说没有好的排名就无商可务。现在的网站多如牛毛,对于非知名网站,用户主要依靠搜索引擎和其他网站上的链接来访问你的网站,而非依靠域名。不发布独特信息,就不会有好的搜索引擎排名,没有好的搜索引擎排名你的网站做得再华丽,也不会有人找到,用户找不到你的网站就不可能形成销售。很多网站已经意识到这一点了,发布了大量的信息,但信息不是自己写的,基本全是转发的,没有自己的特点,没有独特性。目前的搜索引擎都有一定的智能,能够区分信息是不是转发的,转发的信息,对于搜索引擎排名有一定的帮助,但帮助不大。因此,发布独特的信息很重要。丰富的信息能带来不同类型的客户。发布信息不仅要发布与企业有关的信息、与产品有关的信息、与销售有关的信息,更重要的是要发布与用户有关的信息,用户搜索他感兴趣的信息时,搜索到你的网站/网页,他看自己感兴趣的信息时,同时也看到了你的网站与商品,如果他感觉你的网站不错,产品也好,当然就会购买。因此,不仅发布信息很重要,而且不能把网站的信息发布限定的范围太窄,你的客户感兴趣的信息都可以大量发布。要大量发布信息,没有一个好的信息发布系统,一是费时费力,二是各个网页风格迥异,带给用户的感受很不好,他就会产生这样的感觉,你们网页就是这种水平,你们的产品也好不到哪去,用户看到你的产品他也不会购买你的产品。这也是造成那些相信只要有钱做广告就能做好营销的企业,经常出现广告点击量高而销售额低的尴尬现象的重要原因。古语讲:“行之善者,在所能为。”建立网站新闻发布系统有着重要意义,在本项目中研究如何才能做好信息发布系统。目标:(1)建立一个让用户可以方便地发布新闻的系统(包括发布/修改/删除);(2)建立可以让浏览者可以愉快阅读的新闻显示页面;(3)通过前两项内容学习、实践,让读者掌握相关ASP.NET知识,学会基于三层架构ASP.NET网站开发;任务1发布新闻5.1.1任务描述新闻发布系统是企业营销网站的一个重要子系统,新闻发布是一个网站最基本、也是最重要的工作。在这一任务中实现新闻发布系统中的新闻发布功能。5.1.2任务分析如项目2中图XXX所示,新闻发布系统是基于三层架构进行开发的,基于三层架构建立进行项目开发的基本过程如下:确定对象建立实体类建立数据表建立数据访问类建立业务逻辑类建立用户界面建立后台代码最后测试运行效果。在这一任务中,按基于三层架构进行项目开发的基本过程,逐一完成新闻发布系统各个模块的开发,最终实现写成新闻发布功能。5.1.3相关知识一个系统在编码前,都要经过分析与设计两个步骤。在分析阶段,一般抛开具体技术,首先抽象出类及其属性。1、建立静态类(1)对象分析在企业营销网站项目中新闻发布是一个很简单的用例,从新闻发布用例中首先识别对象,然后提取出类。新闻发布的实体类是新闻类,因为新闻很多,进行分类管理会更加方便,如把新闻分为企业新闻、服务条款、专业知识、常见问题等,所以还需要一个新闻分类对象。(2)属性分析属性是用来描述类和对象的特性的。一个属性是一个数据项(状态信息),类中对象都有相应的值(状态)。在面向对象分析中,“属性”用来反映问题域和系统的任务;属性能帮助我们更深入、更具体的认识类和对象和结构,换句话说,属性能为“类和对象”以及“结构”提供更多的细节。选择属性的过程包括分析和选择两步。一般步骤是:首先,在需求陈述中找出属性或通过分析找出属性。这些属性必须是问题域中对象的基本性质,而且在目标系统中是必要的。也就是说,只考虑与目标系统相关的属性,不考虑超出目标系统范围的属性。最后,恰当的给属性命名。按照如上原则,企业营销网站系统中新闻分类的属性有编号、分类名称。新闻类的属性有编号、新闻分类、标题、来源、作者、发布时间、内容、浏览次数等。描述属性的语法格式为:可见性属性名类型名=初值{性质串}在类图中公有类型用“+”表示,私有类型用“−”表示,把它们标识在属性名称的左侧。在分析阶段,不需要按照某种编程语言设计,也不需要设计具体细节。绘制分析阶段的实体对象图主要是用来与客户交流的,并为下一步的设计打下基础。新闻分类实体对象与新闻实体对象如图5-1-1所示。图5-1-1新闻分类与新闻的类图(3)定义新闻类根据分析材料与技术平台,把自定义的实体类转化成系统类。本实例网站是基于C#的ASP.NET网站,如图5-1-2所示,因为C#是一种很新的语言,一些UML分析工具中可能没有C#的数据类型,在实际设计时有一定的不便。图5-1-2新闻分类与新闻的类图(4)建立新闻类根据系统类建立一个真实的类。右键单击Model项目类库,选择“新建项”,如图5-1-3所示,选择类模板,输入文件名NewsClass.cs,如图5-1-4所示。图5-1-3添加新项图5-1-4新建NewsClass.cs类文件在新建的NewsClass.cs文件中,输入NewsClass类代码。Model项目类库中的类是实体类,只有字段与属性,没有方法。因此,只需要为NewsClass类定义字段和属性。在.NETFramework3.5中新增了自动属性,不需要定义字段变量,只需要简单地定义属性。NewsClass类的定义代码如下:namespaceModel{publicclassNewsClass{publicintClassID{get;set;}publicstringClassName{get;set;}}}按照同样的方法,在Model项目类库中建立News.cs类文件,在新建的News.cs类文件中,输入News类代码,News类定义代码如下。usingSystem;namespaceModel{publicclassNews{publicintID{get;set;}publicNewsClassNewsClass{get;set;}publicstringTitle{get;set;}publicstringSource{get;set;}publicstringAuthor{get;set;}publicstringContent{get;set;}publicDateTimeUpdatatime{get;set;}publicintClick{get;set;}}}2、建立新闻数据表静态模型中的数据的形态,是一种“瞬时”的数据,即在程序运行的时候存在于内存中,一旦程序结束,或者数据处理结束,数据就从内存中被清除。数据的另外一种表现形态,就是永久化保存的形态。在很多情况下,需要把处理的数据保存到磁盘上,使数据成为永久化保存数据。新闻类也是一样的,需要将新闻信息的数据保存起来才能在今后浏览。数据库是最常用,也是最有效的数据存储方法。在一般的项目中都采用数据库来保存数据,我们这个实例项目采用SQLServer来保存数据。使用面向对象技术把数据保存在对象中,SQLServer是关系型数据库,怎么把保存在对象中的数据保存到关系型数据库,使“瞬时”数据变成永久数据呢?采用面向对象建模技术建立了对象模型后,可以把静态对象映射到数据库,映射方法是把静态模型中的类和关系数据库中的表相对应,数据表的名称对应类的名称,类数据表的列分别对应类属性。静态模型中类的一个实例(对象)和数据模型中表的一条纪录(行)相对应。但需要注意:从静态类到表的映射不全是一一对应的,对于简单的应用,大多数静态模型中的类与数据库中的表是一一对应的。按项目3中讲述的方法,打开网站的数据库,在这个数据库中再添加NewsClass表,根据NewsClass类在SQLServer建立的NewsClass表,NewsClass表定义如图5-1-5所示。在这个数据库中再添加News表,根据News类在SQLServer建立的News表,News表结构如图5-1-6所示。注意:要把新建的NewsClass表的ClassID字段定义为关键字段,并把该字段是否是标识规范设为“是”,参见图5-1-5。同理,要把新建的News表中的ID字段定义为关键字段,并把该字段是否是标识规范设为“是”。图5-1-5NewsClass表结构图5-1-6News表结构把静态对象映射到数据库后,就可以利用ADO.NET技术,把静态对象中的数据保存到数据库中了。3、建立添加新闻的存储过程打开本实例网站的数据库(EMData.MDF),按项目3中所述的添加存储过程的方法,建立添加新闻的存储过程(Add_News)。代码如下:ALTERPROCEDURE[dbo].[Add_News](@ClassIDint,@Titlenvarchar(50),@Sourcenvarchar(50),@Authornvarchar(50),@Contentntext,@UpdatatimeDatetime,@Clickint)ASINSERTINTONews(ClassID,Title,Source,Author,Content,Updatatime,Click)Values(@ClassID,@Title,@Source,@Author,@Content,@Updatatime,@Click)RETURN@@Identity在此存储过程中的最后一句是RETURN@@Identity,这一句很重要,对于添加记录的存储过程,如果数据表中的关键字段是标识字段,它就返回了新添加的一条新闻的自动编号。通过程序可以访问。获得该返回值的方法是:首先,定义命令对象获取默认返回值的参数,默认返回参数的参数名称是ReturnValue,参数的类型是SqlDbType.Int、参数的宽度为4、参数的方向是返回值ReturnValue、参数的精度、参数的小数位数、源列、要使用的DataRowVersion和参数的值初始化SqlParameter类的新实例。这个参数的属性很多,方法代码有些复杂,但很实用。示例代码如下:cmd.Parameters.Add(newSqlParameter("RETURNVALUE",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null));然后,在执行存储过程之后,用如下的方法获取返回值:intID=(int)cmd.Parameters["RETURNVALUE"].Value;4、建立添加新闻的数据访问层打开DAL项目类库,在其中新建一个NewsDAL.cs类文件(参见图5-1-3),这是添加新闻的数据访问层,用该类直接操作数据库中的News表,在其中新建Add_News()方法,用该方法向News表添加新闻。代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.SqlClient;usingModel;usingSQLHelper;namespaceDAL{publicclassNewsDAL{publicintAdd_News(Newsnews){SQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();SqlParameter[]ParamList={sqlHelper.CreateInParam("@ClassID",SqlDbType.Int,4,news.NewsClass.ClassID),sqlHelper.CreateInParam("@Title",SqlDbType.NVarChar,50,news.Title),sqlHelper.CreateInParam("@Source",SqlDbType.NVarChar,50,news.Source),sqlHelper.CreateInParam("@Author",SqlDbType.NVarChar,50,news.Author),sqlHelper.CreateInParam("@Content",SqlDbType.NText,0,news.Content),sqlHelper.CreateInParam("@Updatatime",SqlDbType.DateTime,8,news.Updatatime),sqlHelper.CreateInParam("@Click",SqlDbType.Int,4,news.Click)};try{return(sqlHelper.RunProc("Add_News",ParamList));}catch(Exceptionex){SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}finally{sqlHelper.Close();}}}5、建立添加新闻操作的业务逻辑层打开BLL项目类库,在其中新建一个NewsService.cs类文件,并在该文件中添加一个Add_News()方法,用它把从网页中接收到的数据传递给NewsDAL对象的Add_News()方法,实现添加新闻。代码如下:usingSystem.Collections.Generic;usingDAL;usingModel;namespaceBLL{publicclassNewsService{publicintAdd_News(Newsnews){NewsDALnewsDAL=newNewsDAL();return(newsDAL.Add_News(news));}}}6、建立新闻分类的数据访问层打开DAL项目类库,在其中新建一个NewsClassDAL.cs类文件,用该类直接操作数据库中的NewsClass表,在NewsClassDAL.cs类文件新建Get_NewsClass()方法,读取所有新闻分类,再建立一个Get_SingNewsClass()方法,按ID读取指定的新闻分类。代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.SqlClient;usingModel;usingSQLHelper;namespaceDAL{publicclassNewsClassDAL{publicList<NewsClass>Get_NewsClass(){SQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();SqlParameter[]ParamList={sqlHelper.CreateInParam("@ParentID",SqlDbType.Int,4,nParentID)};SqlDataReaderrec=null;try{sqlHelper.RunProc("Get_NewsClass",ParamList,outrec);}catch(Exceptionex){SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}List<NewsClass>List_NewsClass=newList<NewsClass>();while(rec.Read()){NewsClassnewsClass=newNewsClass();newsClass.ClassID=Int32.Parse(rec["ClassID"].ToString());newsClass.ClassName=rec["ClassName"].ToString();List_NewsClass.Add(newsClass);newsClass=null;}sqlHelper.Close();returnList_NewsClass;}publicNewsClassGet_SingNewsClass(intnClassid){SQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();SqlParameter[]ParamList={sqlHelper.CreateInParam("@Classid",SqlDbType.Int,4,nClassid)};SqlDataReaderrec=null;try{sqlHelper.RunProc("Get_SingNewsClass",ParamList,outrec);}catch(Exceptionex){SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}NewsClassnewsClass=newNewsClass();while(rec.Read()){newsClass.ClassID=Int32.Parse(rec["ClassID"].ToString());newsClass.ClassName=rec["ClassName"].ToString();}sqlHelper.Close();returnnewsClass;}}}7、建立新闻分类的业务逻辑层打开BLL项目类库,在其中新建一个NewsClassService.cs类文件,用它把从网页中接收到的数据传递给NewsClassDAL对象的相关方法,读取新闻分类的内容。在该类中新建一个Get_NewsClass()方法和一个Get_SingNewsClass()方法。代码如下:usingSystem.Collections.Generic;usingDAL;usingModel;namespaceBLL{publicclassNewsClassService{publicList<NewsClass>Get_NewsClass(){NewsClassDALnewsClassDAL=newNewsClassDAL();return(newsClassDAL.Get_NewsClass(nParentID));}publicNewsClassGet_SintNewsClass(intnClassid){NewsClassDALnewsClassDAL=newNewsClassDAL();return(newsClassDAL.Get_SintNewsClass(nClassid));}}}8、发布新闻操作的界面(1)发布新闻的界面设计发布新闻的界面设计如图5-1-7所示。图5-1-7添加新闻的界面右键单击网站项目中的Admin文件夹,选择“添加新项”,新建一个Add_News.aspx网页文件。参考图5-1-7,在Add_News.aspx网页中用表格布局,建立最简单的添加新闻操作界面,一般的信息输入都采用文本框,如输入标题文本的文本框为<asp:TextBoxID="Title"runat="server"></asp:TextBox>,新闻分类采用下拉列表控件,允许用户从下拉列表中选择一项,如新闻分类下拉列表控件的代码为<asp:DropDownListID="ClassID"runat="server"></asp:DropDownList>,新闻内容一般需要输入的文字数量都很大,采用文本区域控件,在ASP.NET2.0中,文本区域控件与文件框控件是同一个控件,只要把文件框控件的TextMode属性设置为“MultiLine”,文件框控件就变成了文本区域控件。本实例中输入新闻内容的文本框设置为<asp:TextBoxid="Content"runat="server"TextMode="MultiLine"Width="850px"Height="300px"></asp:TextBox>。添加新闻操作界面的完整代码如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Add_News.aspx.cs"Inherits="admin_Add_News"%><%@RegisterSrc="Bottom.ascx"TagName="Bottom"TagPrefix="uc1"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><headrunat="server"><title>添加新闻</title><linkhref="StyleSheet.css"rel="stylesheet"type="text/css"/></head><body><formid="form1"runat="server"><divstyle="background-color:#eeeeee;text-align:center;"><divclass="space5"></div><divclass="h2Bg"><h2>添加新闻</h2></div><divclass="space5"></div></div><tablestyle="margin-top:10px;"><tr><tdclass="rightTd">新闻标题:</td><tdclass="cnoBorderTd"><asp:TextBoxID="Title"runat="server"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator1"runat="server"ControlToValidate="Title"ErrorMessage="新闻标题不能为空"></asp:RequiredFieldValidator></td></tr><tr><tdclass="rightTd">来源:</td><tdclass="cnoBorderTd"><asp:TextBoxID="Source"runat="server"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator2"runat="server"ControlToValidate="Source"ErrorMessage="新闻来源不能为空"></asp:RequiredFieldValidator></td></tr><tr><tdclass="rightTd">作者:</td><tdclass="cnoBorderTd"><asp:TextBoxID="Author"runat="server"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator3"runat="server"ControlToValidate="Author"ErrorMessage="作者不能为空"></asp:RequiredFieldValidator></td></tr><tr><tdclass="rightTd">新闻分类:</td><tdclass="cnoBorderTd"><asp:DropDownListID="ClassID"runat="server"></asp:DropDownList><asp:RequiredFieldValidatorID="RequiredFieldValidator4"runat="server"ControlToValidate="ClassID"ErrorMessage="新闻分类不能为空"></asp:RequiredFieldValidator></td></tr><tr><tdclass="rightTd">详细内容:</td><tdclass="cnoBorderTd"><asp:TextBoxid="Content"runat="server"TextMode="MultiLine"Width="850px"Height="300px"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator5"runat="server"ControlToValidate="Content"ErrorMessage="新闻内容不能为空"></asp:RequiredFieldValidator></td></tr><tr><tdclass="rightTd">访问量:</td><tdclass="cnoBorderTd"><asp:TextBoxID="Click"runat="server">0</asp:TextBox></td></tr><tr><tdclass="rightTd"></td><td><asp:ButtonID="btnAddNews"runat="server"OnClick="btnAddNews_Click"Text="添加"/></td></tr></table><uc1:BottomID="Bottom1"runat="server"/></form></body></html>注意:在上述代码中应用了样式,有关本页应用的样式,请打开StyleSheet.css查看详细内容,样式表的编写方法,请查看项目4中任务3的相关知识。在上述代码中还应用了用户控件Bottom.ascx,该用户控件的代码很简单,仅仅是一个版权的声明,使用该用户控件的目的就是为了不重复在每一页都编写一遍这部分内容,以及如果某天需要修改其内容,只要改一个地方其它引用这个控件的网页都被修改了,可以大大减少重复劳动。数据验证,在每个项目中都必须进行数据验证工作。在ASP.NET项目开发时可以使用ASP.NET的数据验证控件。为确保在添加新闻时每一项都输入了内容,在代码中为每个输入项都添加了一个必填数据验证控件RequiredFieldValidator,应用该控件时有两个必填属性,分别是ControlToValidate和ErrorMessage,ControlToValidate属性用来设置要验证哪个控件,比如要验证标题文本框,请设置该属性值为标题文本框的ID值,如ControlToValidate="Title",ErrorMessage属性用来设置当用户没用输入某项时显示的必须输入信息的提示,如ErrorMessage="新闻标题不能为空"。验证标题文本框的必填验证控件的完整代码是:<asp:RequiredFieldValidatorrunat="server"ID="RequiredFieldValidator1"ControlToValidate="Title"ErrorMessage="新闻标题不能为空"></asp:RequiredFieldValidator>,在每一个输入的文本框上都应用了必填输入验证控件,其代码与新闻标题的验证控件代码类似,不再重述。设计完成后,右键单击Add_News.aspx,选择“在浏览器中查看”,可以看到如图5-1-7所示的浏览效果。(2)发布新闻的后台代码●填充新闻分类下拉列表控件打开添加新闻页时,读取新闻分类表的内容,填充新闻分类采用下拉列表控件,以 便发布新闻时选择使用。填充新闻分类采用下拉列表控件的方法如下://填充新闻分类的DropDownListpublicvoidBinClassData(){NewsClassServicenewsClassService=newNewsClassService();ClassID.DataSource=newsClassService.Get_NewsClass(0);ClassID.DataTextField="ClassName";ClassID.DataValueField="ClassID";ClassID.DataBind();}注意:用这段代码给下拉列表控件提供数据源(DataSource)时,必须同时指定下拉列表控件的文本字段(DataTextField)和值字段(DataValueField),这两个字段的作用不同,文本字段是显示给用户看的,值字段是为后续程序代码应用的。最后别忘记进行数据绑定,即执行ClassID.DataBind()语句。数据绑定完成后,打开添加新闻界面时就可以看到新闻分类下拉列表控件其中已经填充了数据,可以选择使用,效果如图5-1-8所示。图5-1-8新闻分类列表框●读取各个控件的数据实例化一个新闻类,然后就可以读取各个文件框的值,并赋给新闻实例的各属性,代码如下:Newsnews=newNews();news.Title=Title.Text;news.Source=Source.Text;news.Author=Author.Text;news.Content=Content.Text;news.Updatatime=DateTime.Now;news.Click=Int32.Parse(Click.Text);下拉列表控件的数据读取方法与文本框中数据有一定的不同。读取下拉列表控件中被选中项的数据的方法:ClassID.SelectedValue。该例中新闻的NewsClass属性不是C#的基本数据类型,而是自定义的新闻分类类型,读取到下拉列表控件中被选中项的数据后,还要利用newsClassService对象把该数据转换成新闻分类类型。news.NewsClass=newsClassService.Get_SingNewsClass(Int32.Parse(ClassID.SelectedValue));●把读取的数据写入数据库在三层应用架构进行项目开发时,用户界面不能直接操作数据库,要把读取的数据写入数据库,只能通过业务逻辑层(BLL),调用NewsService对象的实例newsService的Add_News(news)方法,再通过访问数据访问层(DAL),调用NewsDAL对象的实例newsDAL的Add_News(news)方法把数据写入到数据库中。代码如下:NewsServicenewsService=newNewsService();intnID=newsService.Add_News(news);if(nID>0){Response.Write("<script>alert('添加成功');location.href='Ddeault.aspx';</script>");}else{Response.Write("<script>alert('添加失败');history.back(1);</script>");}提示:从这段代中看不到数据操作的语句,但的确以把数据写入到了数据库,有关数据操作的语句在数据访问层(DAL),NewsDAL对象的Add_News(news)方法中。在这段代码中不论添加新闻操作成功与失败都给用户有提示,在ASP.NET中进行提示的方法,一是利用给控件赋值的方法实现,二是用javascript实现,本实例采用第二种方法。用javascript实现时,实际是用ASP.NET的Response对象的Write方法输出一段javascript代码。添加成功后先提示用户添加成功,再利用javascript的location对象的href属性来指定转到的网址,这两步操作的实际代码为:Response.Write("<script>alert('添加成功');location.href='Ddeault.aspx';</script>")。如果有错误发生,则是先提示用户,再后退到原来的网址。提示:因为还没有开发显示新闻的网页,临时把网址转到Ddeault.aspx,如果开发了显示新闻的网页,就应该转到显示新闻的网页。●后台操作的完整代码如下:usingSystem;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;//引用三层架构usingModel;usingBLL;publicpartialclassadmin_Add_News:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){if(!Page.IsPostBack){BinClassData();}}//填充新闻分类的DropDownListpublicvoidBinClassData(){NewsClassServicenewsClassService=newNewsClassService();ClassID.DataSource=newsClassService.Get_NewsClass(0);ClassID.DataT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论