FreeTextBoxid="FreeTextBox1"runat="Server"SupportFolder="aspnet_client/FreeTextBox/"ButtonSet="Office2003"Height="120px"Width="365px"ImageGalleryPath="../../images/"Language="zh-cn"/>
(4)写入数据库。
完成以上配置后,就可以使用该组件向数据库插入数据。
3.功能实现
主要步骤如下:
(1)创建Web窗体,命名为ReleaseWord.aspx。
(2)发表留言页面中使用的主要控件如表:
控件类型
控件名称
数量
用途
HTML
Table
1
布局页面
HTML
Input(Reset)
2
重置/返回
标准
Button
1
提交
标准
Textbox
1
填写留言主题
标准
FreeTextBox
1
填写留言内容
(3)主要代码:
protectedvoidbtnOK_Click(objectsender,EventArgse)
{
SqlDatada=newSqlData();
stringcmdtxt="INSERTINTOtb_LeaveWord(Uid,Subject,Content,DateTime,IP)";
cmdtxt+="VALUES('"+Session["UserName"].ToString()+"','"+this.TextBox1.Text+"'";
cmdtxt+=",'"+this.FreeTextBox1.Text+"','"+DateTime.Now+"'";
cmdtxt+=",'"+Request.UserHostAddress+"')";
booladd=da.ExceSQL(cmdtxt);
if(add==true)
{
Response.Write("alert('添加成功!
');location='Index.aspx'");
}
else
{
Response.Write("alert('添加失败!
');location='javascript:
history.go(-1)'");
}
}
(三)查看留言
ShowWord.aspx用于查看留言信息,效果如下:
1.功能描述
用户在首页选择相应的主题后,即可进入ShowWord.aspx查看详细内容。
在开发本系统时,需要在页面中比较全面的显示一些信息,但如果要显示的信息记录较多,此时用一个页面显示所有的记录,可能给用户的浏览带来不便,为了解决这个问题,开发人员可以使用分页技术来限定一个页面中显示的记录数。
本系统在留言板中,通过DataList控件绑定数据,分页显示该系统中的留言信息。
2.关键技术
(1)本系统通过DataList控件绑定数据,分页显示该系统中留言信息的关键代码如下:
PagedDataSourceps=newPagedDataSource();
ps.AllowPaging=true;//是否可以分页
ps.PageSize=3;//显示的数量
ps.CurrentPageIndex=curpage-1;//取得当前页的页码
this.DataList1.DataSource=ps;
(2)本系统是通过母版来实现的,因此在布局页面时,只需要布局母版页的内容即。
使用ASP.NET母版页可以为应用程序中的页创建一致的布局。
单个母版页可以为应用程序中的所有页定义所需的外观和标准行为。
可以创建包含要显示内容的各个内容页。
当用户请求内容页时,这些内容页与母版页合并,然后将母版页的布局与内容页组合在一起输出。
3.功能实现
此功能的实现主要用到数据库中的tb_LeaveWord表和tb_Reply表。
本模块根据传入的编号值来查找tb_LeaveWord中的信息,给声明的变量赋值,并绑定一个自定义方法dlBind方法,该方法实现分页的功能,方便查看。
主要实现步骤如下:
(1)创建Web窗体,命名为LeaveWordView。
(2)留言信息查看页面中用到的主要控件如下表:
控件类型
控件名称
数量
用途
HTML
Table
6
布局页面
标准
Label
2
显示数据
标准
DataList
1
显示检索到的数据
标准
LinkButton
6
我要回复/查看回复/控制翻页
(3)主要代码:
由于在前台页面中绑定了几个变量,因此要在后台代码中首先声明这些全局变量,并将它们设为public类型,代码如下:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
publicpartialclassDefault2:
System.Web.UI.Page
{
publicstringShowSubject,ShowTime,ShowContent,ShowName;
//以下为其他事件和方法
…………
}
在Page_Load事件中,首先根据来自主页传递的值检索数据表中相关数据,再给声明的变量赋值,并绑定一个自定义方法dlBind方法,代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
{
stringcmdtxt="SELECT*FROMtb_LeaveWordWHEREID='"+Request["ID"].ToString()+"'";
SqlConnectionCon=newSqlConnection(ConfigurationManager.AppSettings["ConSql"]);
Con.Open();
SqlCommandCom=newSqlCommand(cmdtxt,Con);
SqlDataReaderdr=Com.ExecuteReader();
dr.Read();
if(dr.HasRows)
{
ShowSubject=dr["Subject"].ToString();
ShowTime=dr["DateTime"].ToString();
ShowContent=dr["Content"].ToString();
ShowName=dr["Uid"].ToString();
}
dr.Close();//关闭阅读器
this.dlBind();//调用dlBind方法
}
页面中最关键的是dlBind方法的使用,该方法中实现了DataList控件分页技术,代码如下:
publicvoiddlBind()
{
intcurpage=Convert.ToInt32(labNowPage.Text);
PagedDataSourceps=newPagedDataSource();
SqlConnectionmycon=newSqlConnection(ConfigurationManager.AppSettings["ConSql"]);
mycon.Open();
stringcmdtxt1="SELECT*FROMtb_ReplyWHEREReplyID="+Request["ID"].ToString()+"";
SqlDataAdapterMyAdapter=newSqlDataAdapter(cmdtxt1,mycon);
DataSetds=newDataSet();
MyAdapter.Fill(ds,"tb_Reply");
ps.DataSource=ds.Tables["tb_Reply"].DefaultView;
ps.AllowPaging=true;//是否可以分页
ps.PageSize=3;//显示的数量
ps.CurrentPageIndex=curpage-1;//取得当前页的页码
lnkbtnPrve.Enabled=true;
lnkbtnTop.Enabled=true;
lnkbtnNext.Enabled=true;
lnkbtnLast.Enabled=true;
if(curpage==1)
{
lnkbtnTop.Enabled=false;//不显示第一页按钮
lnkbtnPrve.Enabled=false;//不显示上一页按钮
}
if(curpage==ps.PageCount)
{
lnkbtnNext.Enabled=false;//不显示下一页
lnkbtnLast.Enabled=false;//不显示最后一页
}
this.labCount.Text=Convert.ToString(ps.PageCount);
this.DataList1.DataSource=ps;
this.DataList1.DataKeyField="ID";
this.DataList1.DataBind();
}
控制DataList翻页主要使用LinkButton控件,实现分页功能的代码如下:
protectedvoidlnkbtnTop_Click(objectsender,EventArgse)
{
this.labNowPage.Text="1";
this.dlBind();
}
protectedvoidlnkbtnPrve_Click(objectsender,EventArgse)
{
this.labNowPage.Text=Convert.ToString(Convert.ToInt32(this.labNowPage.Text)-1);
this.dlBind();
}
protectedvoidlnkbtnNext_Click(objectsender,EventArgse)
{
this.labNowPage.Text=Convert.ToString(Convert.ToInt32(this.labNowPage.Text)+1);
this.dlBind();
}
protectedvoidlnkbtnLast_Click(objectsender,EventArgse)
{
this.labNowPage.Text=this.labCount.Text;
this.dlBind();
}
(四)管理留言
LeaveWordManage.aspx用于管理留言,效果如下:
1.功能描述
单击导航栏中的“留言管理”项,进入到登录页面,该页面是管理员用户登录系统的入口。
管理员登录成功后,即可进入留言信息管理页面,该页面显示所有注册用户的留言信息,并可以对留言信息进行查看、回复和删除。
2.关键技术
(1)本模块需要实现把数据显示到DataList控件中,使用到DataList控件的绑定技术。
DataList控件提供了DataKeys属性。
该属性用于获取存储数据列表控件中每个记录的键值。
(2)本系统主要用到了session对象,目的是为了用session对象判断用户登录状态,如果程序没有判断用户登录状态,那么用户登录毫无意义,非法用户便可通过地址栏访问任一网页;如果判断其登录状态,非法用户则不可通过地址栏非法访问网站后台,并且将网页重新定向到网站登录页面。
3.功能实现
本模块需要实现数据显示到DataList控件中,使用到了DataList控件的绑定技术。
此功能的实现用到数据库中的tb_LeaveWord表,通过传过来tb_LeaveWord表中ID字段的值的应用,对该记录进行操作完成“回复留言”、“查看留言”、“删除留言”功能的实现。
由于前台页面中绑定的是变量,为了使数据能够正常显示,首先要声明几个全局变量,代码如下:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
publicpartialclassDefault2:
System.Web.UI.Page
{
publicstringShowSubject,ShowTime,ShowContent;//声明的变量
//以下为其他事件和方法
…………
在Page_Load事件中,首先判断用户是否登录,若未登录,则返回到登录页面;反之,进入管理页面并将数据绑定到DataList控件,代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
{
if(Session["UserName"]==null)
{
Response.Redirect("Login.aspx");
}
this.dlBind();
}
该页面中具有删除留言功能,主要是通过DataList控件中的LinkButton控件实现。
将LinkButton按钮的CommandName属性值设为delete,然后DataList控件的DeleteCommand事件中编写代码完成删除功能,代码如下:
protectedvoidDataList1_DeleteCommand(objectsource,DataListCommandEventArgse)
{
stringstrid=this.DataList1.DataKeys[e.Item.ItemIndex].ToString();//获取当前DataList控件列
stringcom