文章教程

20.7留言回复模块

8/31/2020 9:56:04 PM 人评论 次浏览

从本节开始编码实现留言回复模块。此模块的功能是提供系统内留言的回复表单,供用户发布对某留言的回复信息。本模块功能的实现文件如下。

  • Huifu.aspx。
  • Huifu.aspx.cs。

留言回复表单页面文件Huifu.aspx的功能是提供留言回复表单,供用户发布对某留言的回复信息。其具体实现过程如下。

(1)插入3个TextBox控件,分别用于输入IP地址、回复内容和验证码。

(2)插入1个CustomValidator控件,用于对回复内容的验证。

(3)插入1个TextBoxWatermarkExtender控件,用于显示水印提示。

(4)插入1个ValidatorCalloutExtender控件,用于实现多样式验证。

(5)调用验证码文件Yanzhengma.aspx实现验证码显示。

(6)定义MessageValidator(source,argument)来控制输入的回复内容。

文件Huifu.aspx的主要实现代码如下。

……
  <asp:ScriptManager ID="sm" runat="server" />
  <table class="Table" border="0" cellpadding="2" bgcolor="Black" cellspacing="1" align="center">
    <tr bgcolor="white"><td colspan="2"><hr /></td></tr>    
    <tr bgcolor="white">
      <td>IP地址:</td>
      <td width="90%"><asp:TextBox ID="tbIP" runat="server" Enabled="false" SkinID="nn" Width="40%"></asp: 
      TextBox></td>
    </tr>    
    <tr bgcolor="white">
      <td valign="top">回复内容:</td>
      <td width="90%">
        <asp:TextBox ID="tbMessage" runat="server" Height="200px" SkinID="nn" TextMode="MultiLine" Width 
        ="80%"></asp:TextBox>
        <asp:CustomValidator ID="cvMessage" runat="server"
         ClientValidationFunction="MessageValidator" ControlToValidate="tbMessage"
         Display="None" ErrorMessage="长度至少为30,最多为3000。">
        </asp:CustomValidator>
        <ajaxToolkit:TextBoxWatermarkExtender ID="wmeMessage" runat="server"
         TargetControlID="tbMessage" WatermarkText="请输入留言内容"
         WatermarkCssClass="Watermark">
        </ajaxToolkit:TextBoxWatermarkExtender>
         <ajaxToolkit:ValidatorCalloutExtender ID="vceMessage" runat="server"
         TargetControlID="cvMessage" HighlightCssClass="Validator">
        </ajaxToolkit:ValidatorCalloutExtender>
      </td></tr>
……

上述实例代码执行后,将首先显示回复表单界面,如图20-10所示;当输入的回复内容非法时,则调用Ajax控件显示对应的提示,如图20-11所示。

图片 437

图20-10 回复表单界面效果图

图片 438

图20-11 回复内容非法提示效果图

回复数据处理页面文件Huifu.aspx.cs的功能是获取用户回复表单的数据,并将获取的回复数据添加到系统库中。其具体实现过程如下。

(1)引入命名空间,声明类Reply。

(2)通过Page_Load载入初始化回复表单界面。

(3)IP地址判断处理。如果IP为空,则停止处理。

(4)定义btnCommit_Click,进行数据处理。

(5)验证码判断处理。如果非法,则输出提示。

(6)将数据添加到系统库中。

上述过程的运行流程如图20-12所示。

图20-12 留言回复处理流程图

文件Huifu.aspx.cs的主要实现代码如下。

……
using ASPNETAJAXWeb.ValidateCode.Page;
public partial class Reply : System.Web.UI.Page
{
  int messageID = −1;
  protected void Page_Load(object sender, EventArgs e)
  { //获取客户端的IP地址
    tbIP.Text = Request.UserHostAddress;
    if(Request.Params["MessageID"] != null)
    {
      messageID = Int32.Parse(Request.Params["MessageID"].ToString());
    }
    btnCommit.Enabled = messageID > 0 ? true : false;
  }
  protected void btnCommit_Click(object sender,EventArgs e)
  {
    if(Session[ValidateCode.VALIDATECODEKEY] != null)
    { //验证验证码是否相等
      if(tbCode.Text != Session[ValidateCode.VALIDATECODEKEY].ToString())
      {
        lbMessage.Text = "验证码输入错误,请重新输入";
        return;
      }
      Message message = new Message();
      //发表回复
      if(message.AddReply(tbMessage.Text,Request.UserHostAddress,messageID) > 0)
      {  //重定向到留言页面 
        Response.Redirect("Index.aspx");
      }
    }
  }
  protected void btnClear_Click(object sender,EventArgs e)
  {
    tbMessage.Text = string.Empty;
  }
}

在上述的留言回复处理过程中,通过foreach语句对内容进行了HTML化处理。因为只有处理后,才能使回复内容以浏览者希望的格式显示。但是这里有一个问题,如果我是一名初学者,在代码中添加HTML转换代码是一件十分复杂的事情。不但在视觉上使程序员感觉繁琐,而且在后期维护上也会感到无所适从,并且也不能保证所有的特殊字符都能被成功转换。笔者很想找一种快速而有效的实现方法,便向KNOWALL求救。他回复说网络中有专门处理HTML标记的工具,例如HtmlArea。HtmlArea是一款很简洁的WTYSWTYG编辑器,是纯JS+Html的编辑器,理论上可以应用在任何语言平台上。经过实际使用,发现其可以和ASP.Net +Ajax 很好的结合。

由此可见,无论是留言系统,还是新闻系统,只要涉及了信息发布和维护的项目,都可以使用现成的文本编辑器。市面上免费的文本编辑器比较多,并且使用方法简单,功能强大,是提高开发效率的重要工具,建议读者多多使用。

教程类别