购物网第二阶段总结笔记2:留言薄


准备工作:

1:创建数据表Shop_guestbook




2:用动软生成器生成代码。

3:在生成的DAL文件GuestbookDAO.cs中写分页方法和计算记录数的方法。(同前面的一样)
只需要把前面的代码复制过去,更改一下表名即可。


前台制作:

分为三步:

第一步:用户发表留言

第二步:管理员回复

第三步:分页

 

【一】用户发表留言:

 


1:新建一个前台页面guestbook.aspx,把静态页面代码弄进去,把静态页的控件替换为服务器端控件。
注意,RadioButton控件使用:男女控件,都添加GroupName="sex"属性,让它们为一组,从而达到互斥的目的。


2:用Repeater控件,把数据库中的数据绑定到前台页面。

 

<asp:Repeater ID="rep" runat="server" onitemdatabound="rep_ItemDataBound">
                            <ItemTemplate>
                             <table width="100%" border="1" class="gb_table">
                                <tr>
                                    <td width="19%" style="color: red; font-weight: bold; padding: 5px;">
                                        第<%#Eval("id") %>条
                                    </td>
                                    <td width="81%" style="padding: 5px;" align="right">
                                        <img src="images/qq.gif" width="16" height="16" /><%#Eval("qq") %>
                                        <img src="images/email.gif" width="14" height="15" /><%#Eval("email") %>
                                        <img src="images/url.gif" width="16" height="16" /><%#Eval("url") %>
                                    </td>
                                </tr>
                                <tr>
                                    <td rowspan="2">
                                        <img src="images/boy.gif" width="70" height="55" />
                                    </td>
                                    <td align="left" valign="top" style="padding: 5px;">
                                        <span class="boldfont">姓名:</span><%#Eval("username") %><br /><span class="boldfont">内容:</span><br />
                                            <%#Eval("body") %>
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right" valign="top">
                                       <%#Eval("createDate") %>     
                                    </td>
                                </tr>

                                 <asp:Panel ID="palReplay" runat="server">                                
                                <tr>
                                    <td colspan="2" bgcolor="#CCCCCC" style="padding: 5px;">
                                        <span class="redfont">管理员回复:</span><br />
                                        <asp:Literal ID="litReplay" Text='<%#Eval("replay") %>' runat="server"></asp:Literal> 
                                    </td>
                                </tr>
                                 </asp:Panel>

                            </table>
                            </ItemTemplate>
                            </asp:Repeater>


 

3:cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web
{
    public partial class guestbook : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            rep.DataSource = new MyShop.DAL.GuestbookDAO().GetList("");
            rep.DataBind();
        }
        //清空
        protected void btnClear_Click(object sender, EventArgs e)
        {
            txtbody.Text = "";
            txtemail.Text = "";
            txtqq.Text = "";
            txturl.Text = "";
            txtusername.Text = "";
            
        }

        //提交留言
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            string username = txtusername.Text;
            string body = txtbody.Text;
            string qq = txtqq.Text;
            string url = txturl.Text;
            string email = txtemail.Text;
            int sex = rad0.Checked ? 0 : 1;
            int res=new MyShop.DAL.GuestbookDAO().Add(new MyShop.Model.Guestbook() { 
            username=username,
            url=url,
            body=body,
            email=email,
            sex=sex,
            qq=qq
            });


            rep.DataSource = new MyShop.DAL.GuestbookDAO().GetList("");
            rep.DataBind();



            txtbody.Text = "";
            txtemail.Text = "";
            txtqq.Text = "";
            txturl.Text = "";
            txtusername.Text = "";

            if (res > 0)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('留言成功!')</script>");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('留言失败,请联系管理员!')</script>");
            }

        }

          }
}

 但是,用户的头像无论是男孩是女,并没有发生变化,在这里要进一步完善头像随性别变化功能:

实现方法:为头像显示写一个后台方法就可以了

 

前台头像

aspx代码:

     <img src="images/boy.gif" width="70" height="55" />

改写一下:

 <img src='images/<%#GetSexImg(Eval("sex")) %>' width="70" height="55" />

 

在后台cs代码中,添加一个GetSexImg方法,传一个参数为Eval("sex"),注意,这个参数是Object类型的。

 

cs代码:

 

        //获取性别头像
        public string GetSexImg(object sex)
        {
            return sex.ToString() == "1" ? "boy.gif" : "girl.gif";
        }


 



 

 

 

 

【二】管理员回复:

原理:Repeater是个循环控件,这个控件每循环显示一项,都会触发ItemDataBound事件,我们在这个事件中可以控制Panel的隐藏和显示。

1:前台页面中把管理员回复的内容放在Panel控件中,当有管理员回复的时候可以把回复显示出来,如果没有回复,则可以把回复这个Panel控件隐藏起来。

                               <asp:Panel ID="palReplay" runat="server">                                
                                <tr>
                                    <td colspan="2" bgcolor="#CCCCCC" style="padding: 5px;">
                                        <span class="redfont">管理员回复:</span><br />
                                            这里是回复内容
                                    </td>
                                </tr>
                               </asp:Panel>

2:回复的内容,用Literal控件显示出来,为这个控件的Text属性绑定数据

                               <asp:Panel ID="palReplay" runat="server">                                
                                <tr>
                                    <td colspan="2" bgcolor="#CCCCCC" style="padding: 5px;">
                                        <span class="redfont">管理员回复:</span><br />
                                        <asp:Literal ID="litReplay" Text='<%#Eval("replay") %>' runat="server"></asp:Literal> 
                                    </td>
                                </tr>
                                 </asp:Panel>


 

3:cs代码:

注意FindControl函数的应用:
 

       //循环列表事件,循环Repeater控件里面的每一行的时候发生的事件
        protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType== ListItemType.AlternatingItem||e.Item.ItemType== ListItemType.Item)//当前行的类型是否等于奇数,或者当前行的类型是否等于item列
            {
                Panel palReplay = e.Item.FindControl("palReplay") as Panel;//通过FindControl函数,查找出id为pnlReplay的Panel控件
                Literal litReplay = e.Item.FindControl("litReplay") as Literal;
                if (litReplay.Text.Trim().Length==0)//若litReplay从后台数据库中提取的文本为空,则Panel隐藏,否则,显示出来
                {
                    palReplay.Visible = false;
                }
                else
                {
                    palReplay.Visible = true;
                }
            }
        }


 【三】分页:

和第一阶段的分页一样。

 

最终aspx代码:

 

                    <tr>
                        <td height="35" align="left" valign="top" style="padding-right: 20px; border-bottom: 1px #999999 solid;">
                            <asp:Repeater ID="rep" runat="server" onitemdatabound="rep_ItemDataBound">
                            <ItemTemplate>
                             <table width="100%" border="1" class="gb_table">
                                <tr>
                                    <td width="19%" style="color: red; font-weight: bold; padding: 5px;">
                                        第<%#Eval("id") %>条
                                    </td>
                                    <td width="81%" style="padding: 5px;" align="right">
                                        <img src="images/qq.gif" width="16" height="16" /><%#Eval("qq") %>
                                        <img src="images/email.gif" width="14" height="15" /><%#Eval("email") %>
                                        <img src="images/url.gif" width="16" height="16" /><%#Eval("url") %>
                                    </td>
                                </tr>
                                <tr>
                                    <td rowspan="2">
                                        <img src='images/<%#GetSexImg(Eval("sex")) %>' width="70" height="55" />
                                    </td>
                                    <td align="left" valign="top" style="padding: 5px;">
                                        <span class="boldfont">姓名:</span><%#Eval("username") %><br /><span class="boldfont">内容:</span><br />
                                            <%#Eval("body") %>
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right" valign="top">
                                       <%#Eval("createDate") %>     
                                    </td>
                                </tr>

                                 <asp:Panel ID="palReplay" runat="server">                                
                                <tr>
                                    <td colspan="2" bgcolor="#CCCCCC" style="padding: 5px;">
                                        <span class="redfont">管理员回复:</span><br />
                                        <asp:Literal ID="litReplay" Text='<%#Eval("replay") %>' runat="server"></asp:Literal> 
                                    </td>
                                </tr>
                                 </asp:Panel>

                            </table>
                            </ItemTemplate>
                            </asp:Repeater>
                          
                            
                        </td>
                    </tr>
                    <tr>
                        <td align="center">
                            <webdiyer:AspNetPager ID="anp" runat="server"  FirstPageText="首页" 
                                LastPageText="尾页" NextPageText="下一页" NumericButtonCount="5" 
                                PrevPageText="上一页" 
                                CustomInfoHTML="共%PageCount%页,当前为第%CurrentPageIndex%页,每页%PageSize%条" 
                                PageSize="5" ShowCustomInfoSection="Left">
                            </webdiyer:AspNetPager>
                        </td>
                    </tr>


cs代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web
{
    public partial class guestbook : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            anp.RecordCount = new MyShop.DAL.GuestbookDAO().CalcCount(GetCond());
            BindRep();
        }

        private string GetCond()
        {
            string cond = "";

            return cond;
        }


        private void BindRep()
        {
            rep.DataSource = new MyShop.DAL.GuestbookDAO().GetList("*","id","desc",anp.PageSize,anp.CurrentPageIndex,GetCond());
            rep.DataBind();        
        }
        //清空
        protected void btnClear_Click(object sender, EventArgs e)
        {
            txtbody.Text = "";
            txtemail.Text = "";
            txtqq.Text = "";
            txturl.Text = "";
            txtusername.Text = "";
            
        }

        //提交留言
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            string username = txtusername.Text;
            string body = txtbody.Text;
            string qq = txtqq.Text;
            string url = txturl.Text;
            string email = txtemail.Text;
            int sex = rad0.Checked ? 0 : 1;
            int res=new MyShop.DAL.GuestbookDAO().Add(new MyShop.Model.Guestbook() { 
            username=username,
            url=url,
            body=body,
            email=email,
            sex=sex,
            qq=qq
            });


            BindRep();



            txtbody.Text = "";
            txtemail.Text = "";
            txtqq.Text = "";
            txturl.Text = "";
            txtusername.Text = "";

            if (res > 0)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('留言成功!')</script>");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('留言失败,请联系管理员!')</script>");
            }

        }

        //循环列表事件,循环Repeater控件里面的每一行的时候发生的事件
        protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType== ListItemType.AlternatingItem||e.Item.ItemType== ListItemType.Item) 
            {
                Panel palReplay = e.Item.FindControl("palReplay") as Panel;
                Literal litReplay = e.Item.FindControl("litReplay") as Literal;
                if (litReplay.Text.Trim().Length==0)
                {
                    palReplay.Visible = false;
                }
                else
                {
                    palReplay.Visible = true;
                }
            }
        }


        //获取性别头像
        public string GetSexImg(object sex)
        {
            return sex.ToString() == "1" ? "boy.gif" : "girl.gif";
        }
    }
}

 

 

后台制作:

 

管理页面的制作:

1:新建一个guestbook_list.aspx页面,作为列表页显示出所有用户的回复

aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="guestbook_list.aspx.cs" Inherits="Web.admin.guestbook_list" %>
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
     <style type="text/css">
        .style1 {
            width: 100%;
            border-style: solid;
            border-width: 1px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
 <h1>用户留言管理</h1>
   <asp:TextBox ID="txtkey" runat="server"></asp:TextBox>
    <asp:Button ID="btnSearch" runat="server" Text="查询" οnclick="btnSearch_Click" />
        <br />
    <table class="style1" border="1px">
        <tr>
            <td>
                姓名</td>
            <td>
                留言</td>       
            <td>
                操作</td>
        </tr>
        <asp:Repeater ID="replist" runat="server">
        <ItemTemplate>
        <tr>
            <td>
               <%#Eval("username") %></td>
            <td>
                <%#Eval("body") %></td>
          
            <td>
                <a href='guestbook_replay.aspx?id=<%#Eval("id") %>'>回复</a>
                <asp:LinkButton ID="lbtnDel" OnClick="Del" CommandArgument='<%#Eval("id") %>' OnClientClick="return confirm('是否确定删除?')" runat="server">删除</asp:LinkButton>
                
                </td>
        </tr>
        </ItemTemplate>
        </asp:Repeater>
        
        <tr>
            <td colspan="4">
                <webdiyer:AspNetPager ID="anp" runat="server" CustomInfoHTML="总%PageCount%页,第%CurrentPageIndex%页/%PageCount%页" FirstPageText="首页" 
                    LastPageText="尾页" NextPageText="下一页" NumericButtonCount="5" PageSize="5" 
                    PrevPageText="上一页" ShowCustomInfoSection="Left" SubmitButtonText="GO" onpagechanged="anp_PageChanged">

                </webdiyer:AspNetPager>
            </td>
        </tr>
    </table>
    </form>
</body>
</html>


 

 

cs代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web.admin
{
    public partial class guestbook_list : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                anp.RecordCount = new MyShop.DAL.GuestbookDAO().CalcCount(GetCond());
                BindRep();
            }
        }

        public string GetCond()
        {
            string cond = "";
       
                if (txtkey.Text.Trim().Length != 0)
                {
                    string key = txtkey.Text.Trim();

                    cond = " body like '%" + key + "%'";
                }
            
            return cond;
        }

        private void BindRep()
        {
            replist.DataSource = new MyShop.DAL.GuestbookDAO().GetList("*", "createdate", "desc", anp.PageSize, anp.CurrentPageIndex, GetCond());
            replist.DataBind();
        }
        //删除
        protected void Del(object sender, EventArgs e)
        {
            string id = (sender as LinkButton).CommandArgument;
            new MyShop.DAL.GuestbookDAO().Delete(int.Parse(id));
            BindRep();
        }
        //分页事件
        protected void anp_PageChanged(object sender, EventArgs e)
        {
            BindRep();
        }

        //查询
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            anp.RecordCount = new MyShop.DAL.GuestbookDAO().CalcCount(GetCond());
            BindRep();
        }
    }
}


 

2:管理员回复页面,建立一个guestbook_replay.aspx页面

aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="guestbook_replay.aspx.cs" Inherits="Web.admin.guestbook_replay" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <h1>管理员回复</h1>
    <p>姓名:<asp:Literal ID="litname" runat="server"></asp:Literal>
    </p>
    <p>留言<asp:Literal ID="litbody" runat="server"></asp:Literal>
    </p>

    <asp:TextBox ID="txtreplay" runat="server" TextMode="MultiLine" Height="141px" Width="534px"></asp:TextBox>

    <br />
    <asp:Button ID="btnreplay" runat="server" Text="回复" οnclick="btnreplay_Click" />

    <asp:Literal ID="litmsg" runat="server"></asp:Literal>

    </form>
</body>
</html>


cs代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web.admin
{
    public partial class guestbook_replay : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string id = Request.QueryString["id"];
                int x;
                if (int.TryParse(id, out x))
                {
                    MyShop.Model.Guestbook model = new MyShop.DAL.GuestbookDAO().GetModel(x);
                    if (model != null)
                    {
                        litname.Text = model.username;
                        litbody.Text = model.body;

                    }



                }
                else
                {
                    Response.Write("传入参数错误!");
                    Response.End();
                    return;
                }
            }
        }

        protected void btnreplay_Click(object sender, EventArgs e)
        {
            string replay = txtreplay.Text;
            if (replay.Length == 0)
            {
                litmsg.Text = "<span style='color:red'>回复内容不能为空!</span>";
                return;
            }


            string id = Request.QueryString["id"];
            int x;
            if (!int.TryParse(id, out x))
            {

                Response.Write("传入参数错误!");
                Response.End();
                return;
            }
            MyShop.Model.Guestbook model = new MyShop.DAL.GuestbookDAO().GetModel(x);
            if (model!=null)
            {
                model.replay = replay;
                new MyShop.DAL.GuestbookDAO().Update(model);
                litmsg.Text = "<span style='color:red'>回复成功!</span>";
                txtreplay.Text = "";

            }
        }
    }
}


 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值