频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

7.2.2 论坛搜索功能的实现

作者: 施伟伟 张蓓 出处:人民邮电出版社  2008-05-07 22:14    砖    好    评论   进入论坛
阅读提示:《征服Ajax——Web 2.0 快速入门与项目实践(.net)》的案例经过编者的精心设计,尽可能减少与Ajax无关的内容,让读者以最快的速度掌握Ajax开发技术。本文介绍了论坛搜索功能的实现。

7.2.2  论坛搜索功能的实现

为了便于录入文章,首先编写一个发表文章的页面PostArticle.aspx,其界面如图7-2所示。PostArticle.aspx的实现比较简单,详细内容请参见随书光盘。

图7-2  发表文章页面

论坛主题搜索页面的运行效果如图7-3所示。在用户输入检索词的同时,下方的结果会实时地改变,不再需要单击“搜索”按钮,检索结果的更新是自动完成的。

论坛主题搜索功能的实现过程如下。

首先在页面中增加一个AjaxPanel控件,然后向其中添加用于检索词输入的文本框控件tbSearchword、查看结果的LinkButton控件lbShowResult以及用于显示搜索结果的DataGrid控件dgResult。在VS.NET的网页设计界面中双击lbShowResult控件,VS.NET会自动增加该LinkButton控件的响应函数lbShowResult_Click。在lbShowResult_Click函数中编写有关查询数据库以及与DataGrid控件进行数据绑定的代码,从而实现查询结果的显示。相关的代码如下:

图7-3  论坛主题搜索页面

private void lbShowResult_Click(object sender, System.EventArgs e)
{
// 绑定DataGrid,显示数据
BindGrid();       
}
/// <summary>
/// 绑定DataGrid,显示数据
/// </summary>
private void BindGrid()
{
// sql语句,查找title字段中含有关键词的记录
sqlSelectCommand1.CommandText = string.Format(
"SELECT * FROM Article WHERE title LIKE '%{0}%'",
tbSearchword.Text
);
    // 将查询返回的数据存入DataSet中
sqlDataAdapter1.SelectCommand = sqlSelectCommand1;
DataSet ds = new DataSet();
try
{
sqlDataAdapter1.Fill(ds);
dgResult.DataSource = ds.Tables[0].DefaultView;
dgResult.DataBind();
}
catch (SqlException ex)
{
// 输出异常信息
Response.Write(ex.Message);
}
finally
{
sqlConnection1.Close();
}
}

接下来,要页面能实时地显示搜索的结果,需要增加检索词输入文本框时的响应函数onkeyup,代码如下:

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strScript = Page.GetPostBackClientEvent(lbShowResult, "");
tbSearchword.Attributes.Add("onkeyup", strScript);
}

上面这两行代码的作用相当于每次释放键盘的同时,单击了一次lbShowResult按钮,这样就可以实现显示结果的实时更新。因为文本框、按钮和DataGrid控件都在AjaxPanel控件内部,因此在执行搜索的时候页面是不刷新的。

论坛搜索页面及其后台代码如例7-4和例7-5所示。

【例7-4】Search.aspx

<%@ Page language="c#" Codebehind="Search.aspx.cs" AutoEventWireup="false"
Inherits="ch71.Search" %>
<%@ Register TagPrefix="ajax" Namespace="MagicAjax.UI.Controls" Assembly="MagicAjax" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Search</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name= "vs_targetSchema">
<LINK media="screen" href="global.css" type="text/css" rel="stylesheet">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<ajax:AjaxPanel id="AjaxPanel1" runat="server"
AjaxCallConnection= "Asynchronous">
<asp:Label id="lblWord" runat="server">请输入您要检索的关键词:</asp: Label>
<asp:TextBox id="tbSearchword" runat="server"
Font-Size="X-Small"></asp:TextBox>
<asp:LinkButton id="lbShowResult" runat="server">查看结果</asp:LinkButton>
<asp:DataGrid id="dgResult" runat="server" Width="100%"
BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px"
BackColor="White" CellPadding="4"
GridLines="Vertical" ForeColor="Black"    AutoGenerateColumns= "False">
<SelectedItemStyle Font-Bold="True" ForeColor="White"
BackColor="#CE5D5A"></SelectedItemStyle>
<AlternatingItemStyle BackColor="White"></AlternatingItemStyle>
<ItemStyle BackColor="#F7F7DE"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White"
BackColor="#6B696B"></HeaderStyle>
<FooterStyle BackColor="#CCCC99"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="id" HeaderText="文章编号">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="title" HeaderText="标题">
<HeaderStyle Width="70%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="author" HeaderText="作者">
<HeaderStyle Width="20%"></HeaderStyle>
</asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="Black"
BackColor="#F7F7DE" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</ajax:AjaxPanel></form>
</body>
</HTML>

【例7-5】Search.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ch71
{
/// <summary>
/// Search 的摘要说明
/// </summary>
public class Search : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox tbSearchword;
protected MagicAjax.UI.Controls.AjaxPanel AjaxPanel1;
protected System.Web.UI.WebControls.LinkButton lbShowResult;
protected System.Web.UI.WebControls.DataGrid dgResult;
protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;
protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
protected System.Data.SqlClient.SqlConnection sqlConnection1;
protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
protected System.Web.UI.WebControls.Label lblWord;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strScript = Page.GetPostBackClientEvent(lbShowResult, "");
tbSearchword.Attributes.Add("onkeyup", strScript);
        }
        #region Web 窗体设计器生成的代码
......
#endregion
        private void lbShowResult_Click(object sender, System.EventArgs e)
{
// 绑定DataGrid,显示数据
BindGrid();       
}
        /// <summary>
/// 绑定DataGrid,显示数据
/// </summary>
private void BindGrid()
{
// sql语句,查找title字段中含有关键词的记录
sqlSelectCommand1.CommandText = string.Format(
"SELECT * FROM Article WHERE title LIKE '%{0}%'",
tbSearchword.Text
);
            // 将查询返回的数据存入DataSet中
sqlDataAdapter1.SelectCommand = sqlSelectCommand1;
DataSet ds = new DataSet();
try
{
sqlDataAdapter1.Fill(ds);
dgResult.DataSource = ds.Tables[0].DefaultView;
dgResult.DataBind();
}
catch (SqlException ex)
{
// 输出异常信息
Response.Write(ex.Message);
}
finally
{
sqlConnection1.Close();
}
}
    }
}

通过上面的讲解,读者可以看到使用Magicajax开发Ajax应用是非常方便的,特别是在现有的ASP.NET应用系统中,如果希望增加局部更新等功能,使用Magicajax是非常理想的选择。

Magicajax的实现机制是利用XMLHttpRequest对象,模拟ASP.NET的页面提交(PostBack),通常称这种方式为CallBack,而在服务器端则会区分CallBack和PostBack,进行不同的处理。实际上这种机制在第3章中已经介绍过(CallBackObject.js),而Magicajax做得更加完善,更易于使用。


回书目   上一节   下一节
关于 Ajax  .net
专题
ASP.NET 2.0基础开发指南
.NET移动与嵌入式技术专题
.NET Framework新手入门专题
VS.NET实用开发专题
ADO.NET实用技巧专题
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
华为路由器配置
华为路由器配置
LAMP技术精解
LAMP技术精解
微软出价446亿美元收购雅虎
微软出价446亿美元收购雅虎
· 微软出价446亿美元收购..
· 网络故障排除宝典
· Vista SP1对决XP SP3
· 2008年上半年全国软考..
· AIX操作系统管理应用(..
· 华为员工自杀频频拷问..
· 三层交换技术专题
· ARP攻击防范与解决方案
· 隐私保护技术探讨
· 反垃圾邮件技术应用
· 龙芯要做中国的“奔腾”
· Windows Server 2008专..
· AMD Phenom三核处理器..
· 路由器设置与口令恢复
· 微软Forefront企业安全..
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· Apache技术专题
· 中间件应用技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· 中间件应用技术专题
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· RAID——磁盘阵列基础
· 路由器设置与口令恢复
· SOA 面向服务架构
· ADSL应用面面俱到
· ADSL应用面面俱到
· 反垃圾邮件技术应用