频道栏目
读书频道 > 软件开发 > C# > 深入体验C#项目开发
2.6.1 留言数据显示
2013-03-27 14:49:39     我来说两句
收藏   我要投稿

本文所属图书 > 深入体验C#项目开发

C#是当今使用最为频繁的编程语言之一,一直在开发领域占据重要的地位。本书通过10个综合实例的实现过程,详细讲解了C#在实践项目中的综合运用过程。这些项目从作者的学生时代写起,到项目经理结束,一直贯穿于作...  立即去当当网订购

1. 留言数据显示模块

留言数据显示模块的功能是,将系统库内的留言信息以列表的样式显示出来,并提供新留言发布表单,将发表的数据添加到系统库中。上述功能的实现文件如下。

文件Index.aspx。

文件Index.aspx.cs。

文件Yanzhengma.aspx。

文件AjaxService.cs。

1) 留言列表显示页面

文件Index.aspx的功能是,插入专用控件将系统内数据读取并显示出来,然后提供发布表单供用户发布新留言。其具体实现流程如下。

插入1个GridView控件,以列表样式显示库内的数据。

在表格内显示各留言的数据内容。

添加3个链接供留言发布、留言回复和留言管理操作。

调用Ajax程序集内的DynamicPopulate控件,实现面板显示留言回复内容。

文件Index.aspx中,留言列表显示页面的主要实现代码如下。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx.cs" 
StylesheetTheme="css" Inherits="Board" %>

    <form id="form1" runat="server">
  <asp:ScriptManager ID="sm" runat="server" >
  <Services>
   <asp:ServiceReference Path="AjaxService.asmx" />
  </Services>
 </asp:ScriptManager>
    <table class="Table" border="0" cellpadding="0" cellspacing="0" align="center">
  <tr><td colspan="2">
  <asp:UpdatePanel runat="server" ID="up">
  <ContentTemplate>
   <asp:GridView ID="gvMessage" runat="server" Width="100%" AutoGenerateColumns="False" SkinID="mm" ShowHeader="False">
   <Columns>
   <asp:TemplateField>
   <ItemTemplate>
   <table align="center" cellpadding="3" cellspacing="0" class="Table">
   <tr>
    <td>作者:<a href='mailto:<%# Eval("Email") %>'><%# Eval("Email") %></a> 于[<%# Eval("IP") %>]、[<%# Eval("CreateDate") %>] 留言</td>
    </tr>
    <tr><td><hr size="1" /></td></tr>
    <tr><td class="Title"> <%# Eval("Title") %></td></tr>
    <tr><td> <%# Eval("Message") %></td></tr>
    <tr>
    <td align="right"><a href="#message">我要留言</a>&nbsp;
<a href='Huifu.aspx?MessageID=<%# Eval("ID") %>'>我要回复</a>
&nbsp;<asp:HyperLink runat="server" ID="hlShowReply" NavigateUrl="#">展开>></asp:HyperLink> <asp:Panel runat="server" ID="pReply"></asp:Panel>
<ajaxToolkit:DynamicPopulateExtender ID="dpeReply" runat="server"
 ClearContentsDuringUpdate="true" UpdatingCssClass="PopulatePanel"
 ServiceMethod="GetReplyByMessage" ServicePath="AjaxService.asmx"
 ContextKey='<%# Eval("ID") %>' TargetControlID="pReply"
 PopulateTriggerControlID="hlShowReply">
</ajaxToolkit:DynamicPopulateExtender>
   </td>
   </tr>
  </table>
  </ItemTemplate>
  </asp:TemplateField>
  </Columns>
  </asp:GridView>
  </ContentTemplate>
  </asp:UpdatePanel>
  </td></tr>

上述代码执行后将在页面内显示系统内已存在的留言数据。

2) 留言发布表单

本模块的功能是为用户提供新留言的发布表单,其具体实现流程如下。

插入5个TextBox控件,分别用于输入留言标题、IP地址、邮件地址、留言内容和验证码。

插入TextBoxWatermark控件,用于确保留言标题不为空。

调用TextBoxWatermark控件,用于确保邮件格式的合法性。

调用ValidatorCallout控件,用于显示邮件非法提示水印效果。

调用TextBoxWatermark控件,用于确保邮件内容的合法性。

插入激活按钮,用于执行相关操作事件。

定义MessageValidator函数,用于确保留言内容大于10字符而不多于8000字符。

调用验证码生成文件。

文件Index.aspx中,留言发布表单的主要实现代码如下。

  <tr>
  <td>留言标题:</td>
  <td width="90%"><asp:TextBox ID="tbTitle" runat="server" SkinID= "nn" Width="80%"></asp:TextBox>
   <asp:RequiredFieldValidator ID="rfTitle" runat="server"
ControlToValidate="tbTitle"ErrorMessage="标题不能为空!">
</asp:RequiredFieldValidator>
   <asp:RegularExpressionValidator ID="revTitle" runat="server"
ControlToValidate="tbTitle" Display="Dynamic"
ErrorMessage="标题不能为空!" ValidationExpression=".+">
</asp:RegularExpressionValidator>
  <ajaxToolkit:TextBoxWatermarkExtender ID="wmeTitle" runat="server"
TargetControlID="tbTitle" WatermarkText="请输入留言标题"
WatermarkCssClass="Watermark">
</ajaxToolkit:TextBoxWatermarkExtender>
   </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>电子邮件:</td>
   <td width="90%"><asp:TextBox ID="tbEmail" runat="server" SkinID= "nn" Width="40%"></asp:TextBox>
  <asp:RequiredFieldValidator ID="rfEmail" runat="server" ErrorMessage= "不能为空!" ControlToValidate="tbEmail" Display="Dynamic">
</asp:Required FieldValidator>
  <asp:RegularExpressionValidator ID="revEmail" runat="server" ControlToValidate="tbEmail"Display="None"
ErrorMessage="电子邮件格式不正确,请输入如下形式的电子邮件:
<br />mmmm@nnn.com" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\. \w+([-.]\w+)*">
</asp:RegularExpressionValidator>
    <ajaxToolkit:TextBoxWatermarkExtender ID="wmeEmail" runat="server"
TargetControlID="tbEmail" WatermarkText="请输入电子邮件"
WatermarkCssClass="Watermark"></ajaxToolkit:TextBoxWatermarkExtender>
    <ajaxToolkit:ValidatorCalloutExtender ID="vceEmail" runat="server"
TargetControlID="revEmail" HighlightCssClass="Validator"></ajaxToolkit: ValidatorCalloutExtender>
   </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="长度至少为10,最多为8000。">
</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>
  <tr bgcolor="white">
   <td>验 证 码:</td>
   <td width="90%">
    <asp:TextBox ID="tbCode" runat="server" SkinID="nn"
Width="80px"></asp:TextBox>
    <asp:Image ID="imgCode" runat="server" ImageUrl =
"Yanzhengma.aspx" />
    <asp:Label ID="lbMessage" runat="server" ForeColor="red"
CssClass="Text"></asp:Label>
   </td></tr>
  <tr bgcolor="white">
   <td>&nbsp;</td>
   <td width="90%">
    <asp:UpdatePanel ID="upbutton" runat="server">
  <ContentTemplate>
   <asp:Button ID="btnCommit" runat="server" Text="提交" SkinID=
"anniu" Width="100px" OnClick="btnCommit_Click" />&nbsp;&nbsp;&nbsp;
   <asp:Button ID="btnReview" runat="server" Text="预览" SkinID=
"anniu" Width="100px" />&nbsp;&nbsp;&nbsp;
   <asp:Button ID="btnClear" runat="server" Text="清空" SkinID=
"anniu" Width="100px" CausesValidation="False" OnClick="btnClear_Click" />
  </ContentTemplate>
  <Triggers>
  <asp:PostBackTrigger ControlID="btnClear" />
  </Triggers>
  </asp:UpdatePanel>
  </td> </tr>
  </table>
    <script language="javascript" type="text/javascript">
    function MessageValidator(source,argument)
    {
  if(argument.Value.length > 10 && argument.Value.length < 8000)
argument.IsValid = true;
  else argument.IsValid = false;
    }
    </script>
</form>

3) 调用验证码文件

验证码文件Yanzhengma.aspx的功能是,调用“bin”目录内的ASPNETAJAXWeb. ValidateCode.dll控件,实现验证码显示效果。文件Yanzhengma.aspx的具体实现代码如下。

<%@ Page Language="C#" AutoEventWireup="false"  Inherits="ASPNETAJAXWeb. ValidateCode.Page.ValidateCode" %>

2. 留言展开回复模块

留言展开回复模块的功能是,当单击某留言后的“展开”链接后,将动态显示此留言的回复数据。其具体实现流程如下。

(1) 调用Ajax的DynamicPopulate控件,用于实现动态显示效果。

(2) 调用文件AjaxService.cs内的GetReplyByMessage()方法,获取回复内容。

文件AjaxService.cs的具体实现代码如下。

///开始引入新的命名空间
using System.Data;
using System.Text;
using System.Web.Script.Services;
using ASPNETAJAXWeb.AjaxLeaveword;
/// AjaxService 的摘要说明
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
///添加脚本服务
[System.Web.Script.Services.ScriptService()]
public class AjaxService : System.Web.Services.WebService {
    public AjaxService ()
 {
    }
    [WebMethod] 
    public string GetReplyByMessage(string contextKey)
 {   ///获取参数ID
  int messageID = -1;
  if(Int32.TryParse(contextKey,out messageID) == false)
  {
   return string.Empty;
  }
  Message message = new Message();
  DataSet ds = message.GetReplyByMessage(messageID);
  if(ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0)
  {
   return string.Empty;
  }
  StringBuilder returnHtml = new StringBuilder();
  foreach(DataRow row in ds.Tables[0].Rows)
  {
   returnHtml.AppendFormat("<div>{0}于[{1}] 回复</div>",
row["IP"],row["CreateDate"]);
   returnHtml.Append("<br />");
   returnHtml.AppendFormat("<div>{0}</div>",row["Reply"]);
   returnHtml.Append("<br />");
  }
  return returnHtml.ToString();      
    }   
}

通过上述代码处理,执行系统留言列表页面后,将首先默认显示留言数据,而不显示留言的回复数据。当单击某留言后的“展开”链接后,此留言的回复信息将动态地显示出来。
2005年12月23日,晴空万里,文本编辑器

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

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

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.6 编码实现
下一篇:2.6.2 留言分页列表显示模块
相关文章
图文推荐
排行
热门
最新书评
文章
下载
读书
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站