首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

RSS是Really Simple Syndication的简称,它是一种网页内容联合格式(Web Content Sydication Format)。本章将介绍使用ASP.NET 2.0和ASP.NET AJAX技术,以及SQL Server 2005数据库共同实现AJAX RSS阅读器的方法。本章介绍的AJAX RSS阅读器是一种无刷新的阅读器,用户使用该阅读器可以以无刷新的方式动态折叠或展开阅读面板。AJAX RSS阅读器的一种效果图如图11.1所示。

图11.1  AJAX RSS阅读器

11.1  AJAX RSS阅读器构成

本节介绍AJAX RSS阅读器的AjaxRss应用程序的组成、配置、数据库设计等。

 11.1.1  AjaxRss应用程序的组成

AJAX RSS阅读器应用程序的名称为AjaxRss,它使用的数据库的名称为AjaxRssDB。在Visual Studio 2005的【解决方案资源管理器】面板中查看该应用程序,如图11.2所示。AjaxRss应用程序的组成元素说明如下:

—  App_Code文件夹包含了2个类文件:ASPNETAJAXWeb.cs和Rss.cs,它们分别定义了AjaxRssSystem和Rss类。

—  App_Themes文件夹包含了AjaxRss应用程序的主题和样式文件,如web.css、web.skin等。

—  Bin文件夹包含了AjaxRss应用程序引入的程序集,如AjaxControlToolKit.dll、ASPNETAJAXWeb.ValidateCode.dll等。

—  AddUrl.aspx页面提供订阅RSS源的功能。

—  Default.aspx页面为AJAX RSS阅读器的主页面。

—  ReaderRss.aspx页面为AJAX RSS阅读器的一个辅助页面,它显示RSS源的具体内容。

—  UpdateUrl.aspx页面提供修改RSS源的功能。

—  UrlManage.aspx页面提供管理RSS源的功能。

—  ValidateCode.aspx页面提供产生验证码的功能。

—  Web.config文件为AjaxRss应用程序的配置文件,它配置了数据库连接字符串、引用的程序集等属性。

图11.2  在【解决方案资源管理器】面板中查看AjaxRss应用程序

 11.1.2  AjaxRss应用程序的配置

AjaxRss应用程序的连接字符串放置在Web.config配置文件的<connectionString>元素中,具体代码如下:

<connectionStrings>

    <add name="SQLCONNECTIONSTRING"

        connectionString="data source=localhost;user id=sa;pwd=123456;

            database=AjaxRssDB"

        providerName="System.Data.SqlClient"/>

</connectionStrings>

AjaxRss应用程序在Web.config配置文件的<controls>元素中还配置了与AJAX服务器控件相关的内容,该内容为AjaxControlToolkit.dll程序集中的控件提供了一个前缀字符串“ajaxToolkit”。因此,在该应用程序中的页面引用AjaxControlToolkit.dll程序集中的控件时,不再需要在每一个页面的HTML代码中添加“<Register>”代码,而是直接使用“ajaxToolkit”前缀来引用AjaxControlToolkit.dll程序集中的控件。<controls>元素的具体代码如下:

<controls>

    <add namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"

        tagPrefix="ajaxToolkit"/>

    ……

</controls>

 11.1.3  数据库设计

AJAX RSS阅读器的数据库的名称为AjaxRssDB,它只包含1个表:Rss,该表保存RSS源的信息,如源标识、源地址等。Rss表包含的字段及其说明如表11.1所示。

表11.1  Rss表

  

数据类型

字段说明

  

   

ID

int

ID

PK

主键(自动增一)

Title

varchar(50)

源标识

 

 

Url

varchar(255)

源地址

 

 

CreateDate

datetime

创建时间

 

 

11.2  RSS源

本节介绍对RSS源的操作,如创建新的RSS源、修改RSS源的属性、删除RSS源、以列表显示RSS源等。

 11.2.1  数据访问层设计

AJAX RSS阅读器的数据访问层由Rss类实现,该类包含在ASPNETAJAXWeb.AjaxRss命名空间中。Rss类的代码定义在Rss.cs类文件中,并且还引入了System.Data.SqlClient命名空间。下面的程序代码声明了Rss类。其中,该类中的方法代码已经省略。

using System;

using System.Data;

using System.Configuration;

using System.Data.SqlClient;

namespace ASPNETAJAXWeb.AjaxRss

{

    public class Rss

    {

        public Rss(){}

        ……

    }

}

与RSS源相关的数据访问层共实现5个功能。实现这些功能及其方法的具体描述如下:

—  public DataSet GetRsses(),获取所有RSS源。

—  public SqlDataReader GetSingleRss(int rssID),获取指定的单个RSS源。

—  public int AddRss(string name,string url),添加RSS源到数据库中。

—  public int UpdateRss(int rssID,string name,string url),修改RSS源的信息。

—  public int DeleteRss(int rssID),删除RSS源。

其中,rssID参数指定被操作RSS源的ID值,name参数指定RSS源的标识,url参数指定RSS源的地址。

在下述程序代码中,GetRsses()方法获取所有RSS源。该方法的具体实现步骤如下:

* 从Web.config配置文件中获取数据库连接字符串,并保存在变量connectionString中。

* 使用上述连接字符串创建SqlConnection对象con,该对象用来连接数据库。

* 创建获取所有RSS源的SQL语句“SELECT * FROM Rss”。

* 创建获取数据的SqlDataAdapter对象da。

* 打开数据库连接,并获取数据。获取的结果保存在DataSet对象ds中。

* 如果上述操作成功,则返回ds。

public DataSet GetRsses()

{   ///获取连接字符串

    string connectionString = ConfigurationManager.ConnectionStrings[

        "SQLCONNECTIONSTRING"].ConnectionString;

    ///创建连接

    SqlConnection con = new SqlConnection(connectionString);

    ///创建SQL语句

    string cmdText = "SELECT * FROM Rss";

    ///创建SqlDataAdapter

    SqlDataAdapter da = new SqlDataAdapter(cmdText,con);

    ///定义DataSet

    DataSet ds = new DataSet();

    try

    {   ///打开连接

        con.Open();

        ///填充数据

        da.Fill(ds,"DataTable");

    }

    catch(Exception ex){throw new Exception(ex.Message,ex);}   ///抛出异常

    finally{con.Close();}                                             ///关闭连接

    return ds;

}

在下述程序代码中,GetSingleRss(int rssID)方法获取指定RSS源的信息。该方法的具体实现步骤如下:

* 从Web.config配置文件中获取数据库连接字符串,并保存在变量connectionString中。

* 使用上述连接字符串创建SqlConnection对象con,该对象用来连接数据库。

* 创建获取指定RSS源的SQL语句“SELECT * FROM Rss WHERE ID=@ID”。其中,@ID参数的值由rssID参数指定。

* 创建获取数据的SqlCommand对象cmd。

* 打开数据库连接,并获取数据。获取的结果保存在SqlDataReader对象dr中。

* 如果上述操作成功,则返回dr。

public SqlDataReader GetSingleRss(int rssID)

{   ///获取连接字符串

    string connectionString = ConfigurationManager.ConnectionStrings[

        "SQLCONNECTIONSTRING"].ConnectionString;

    ///创建连接

    SqlConnection con = new SqlConnection(connectionString);

    ///创建SQL语句

    string cmdText = "SELECT * FROM Rss WHERE ID=@ID";

    ///创建SqlCommand

    SqlCommand cmd = new SqlCommand(cmdText,con);

    ///创建参数并赋值

    cmd.Parameters.Add("@ID",SqlDbType.Int,4);

    cmd.Parameters[0].Value = rssID;

    ///定义SqlDataReader

    SqlDataReader dr;

    try

    {   ///打开连接

        con.Open();

        ///读取数据

        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    }

    catch(Exception ex){throw new Exception(ex.Message,ex);}   ///抛出异常

    return dr;

}

在下述程序代码中,AddRss(string name,string url)方法将RSS源的信息添加到数据库中。该方法的具体实现步骤如下:

* 从Web.config配置文件中获取数据库连接字符串,并保存在变量connectionString中。

* 使用上述连接字符串创建SqlConnection对象con,该对象用来连接数据库。

* 创建插入RSS源的SQL语句“INSERT INTO Rss(Name,Url,CreateDate) VALUES (@Name,@Url,GETDATE())”。其中,@Name和@Url参数的值分别由name和url参数指定。

* 创建执行插入操作的SqlCommand对象cmd。

* 打开数据库连接,执行插入操作,并将该操作影响的行数保存在result变量中。

* 如果上述操作成功,则返回result变量的值,否则返回-1。

public int AddRss(string name,string url)

{   ///获取连接字符串

    string connectionString = ConfigurationManager.ConnectionStrings[

        "SQLCONNECTIONSTRING"].ConnectionString;

    ///创建连接

    SqlConnection con = new SqlConnection(connectionString);

    ///创建SQL语句

    string cmdText = "INSERT INTO Rss(Name,Url,CreateDate)

        VALUES(@Name,@Url,GETDATE())";

    ///创建SqlCommand

    SqlCommand cmd = new SqlCommand(cmdText,con);

    ///创建参数并赋值

    cmd.Parameters.Add("@Name",SqlDbType.VarChar,50);

    cmd.Parameters.Add("@Url",SqlDbType.VarChar,255);

    cmd.Parameters[0].Value = name;

    cmd.Parameters[1].Value = url;

    int result = -1;

    try

    {   ///打开连接

        con.Open();

        ///操作数据

        result = cmd.ExecuteNonQuery();

    }

    catch(Exception ex){throw new Exception(ex.Message,ex);}   ///抛出异常

    finally{con.Close();}                                             ///关闭连接

    return result;

}

在下述程序代码中,UpdateRss(int rssID,string name,string url)方法修改指定RSS源的信息。该方法的具体实现步骤如下:

* 从Web.config配置文件中获取数据库连接字符串,并保存在变量connectionString中。

* 使用上述连接字符串创建SqlConnection对象con,该对象用来连接数据库。

* 创建修改指定RSS源的SQL语句“UPDATE Rss SET Name=@Name,Url=@Url WHERE ID=@ID”。其中,@Name、@Url和@ID参数的值分别由name、url和rssID参数指定。

* 创建执行修改操作的SqlCommand对象cmd。

* 打开数据库连接,执行修改操作,并将该操作影响的行数保存在result变量中。

* 如果上述操作成功,则返回result变量的值,否则返回-1。

public int UpdateRss(int rssID,string name,string url)

{   ///获取连接字符串

    string connectionString = ConfigurationManager.ConnectionStrings[

        "SQLCONNECTIONSTRING"].ConnectionString;

    ///创建连接

    SqlConnection con = new SqlConnection(connectionString);

    ///创建SQL语句

    string cmdText = "UPDATE Rss SET Name=@Name,Url=@Url WHERE ID=@ID";

    ///创建SqlCommand

    SqlCommand cmd = new SqlCommand(cmdText,con);

    ///创建参数并赋值

    cmd.Parameters.Add("@Name",SqlDbType.VarChar,50);

    cmd.Parameters.Add("@Url",SqlDbType.VarChar,255);

    cmd.Parameters.Add("@ID",SqlDbType.Int,4);

    cmd.Parameters[0].Value = name;

    cmd.Parameters[1].Value = url;

    cmd.Parameters[2].Value = rssID;

    int result = -1;

    try

    {   ///打开连接

        con.Open();

        ///操作数据

        result = cmd.ExecuteNonQuery();

    }

    catch(Exception ex){throw new Exception(ex.Message,ex);}   ///抛出异常

    finally{con.Close();}                                             ///关闭连接

    return result;

}

在下述程序代码中,DeleteRss(int rssID)方法将删除指定RSS源的信息。该方法的具体实现步骤如下:

* 从Web.config配置文件中获取数据库连接字符串,并保存在变量connectionString中。

* 使用上述连接字符串创建SqlConnection对象con,该对象用来连接数据库。

* 创建删除指定RSS源的SQL语句“DELETE Rss WHERE ID = @ID”。其中,@ID参数的值由rssID参数指定。

* 创建执行删除操作的SqlCommand对象cmd。

* 打开数据库连接,执行删除操作,并将该操作影响的行数保存在result变量中。

* 如果上述操作成功,则返回result变量的值,否则返回-1。

public int DeleteRss(int rssID)

{   ///获取连接字符串

    string connectionString = ConfigurationManager.ConnectionStrings[

        "SQLCONNECTIONSTRING"].ConnectionString;

    ///创建连接

    SqlConnection con = new SqlConnection(connectionString);

    ///创建SQL语句

    string cmdText = "DELETE Rss WHERE ID = @ID";

    ///创建SqlCommand

    SqlCommand cmd = new SqlCommand(cmdText,con);

    ///创建参数并赋值

    cmd.Parameters.Add("@ID",SqlDbType.Int,4);

    cmd.Parameters[0].Value = rssID;

    int result = -1;

    try

    {   ///打开连接

        con.Open();

        ///操作数据

        result = cmd.ExecuteNonQuery();

    }

    catch(Exception ex){throw new Exception(ex.Message,ex);}   ///抛出异常

    finally{con.Close();}                                             ///关闭连接

    return result;

}

 11.2.2  订阅RSS源

订阅RSS源由AddUrl.aspx页面实现,AddUrl.aspx.cs文件为它的代码隐藏文件。该页面提供了输入RSS源的标识和地址,以及将新的RSS源提交到数据库中的功能。AddUrl.aspx页面的效果图如图11.3所示。

图11.3  AddUrl.aspx页面的效果图

1.界面设计

AddUrl.aspx页面添加了2个TextBox控件和1个Button控件,它们的ID属性的值分别为tbName、tbUrl和btnCommit。

下述程序代码声明了1个TextBox控件,用来输入RSS源的标识,其ID属性的值为tbName。该控件使用了1个TextBoxWatermarkExtender控件和3个ValidatorCalloutExtender控件,它们的ID属性的值分别为wmeName、vceNameBlank、vceNameValue和vceNameRegex。其中,wmeName控件为tbName控件显示水印值“请输入标识”;vceNameBlank、vceNameValue和vceNameRegex控件分别以提示样式显示验证结果。

另外,tbName控件使用2个RequiredFieldValidator控件和1个RegularExpressionValidator控件,它们的ID属性的值分别为rfNameBlank、rfNameValue和revName。其中,rfNameBlank控件验证tbName控件的内容不能为空,即用户输入RSS源的标识不能为空。rfNameValue控件验证tbName控件的内容不能等于“请输入标识”(wmeName水印控件的水印值),这样可以防止用户不输入任何内容就提交到数据库。revName控件验证tbName控件内容的最小长度为1、最大长度为50。

地址标识:<asp:TextBox ID="tbName" runat="server" SkinID="tbSkin"

    Width="60%" MaxLength="50"></asp:TextBox>

<asp:RequiredFieldValidator ID="rfNameBlank" runat="server"

    ControlToValidate="tbName" Display="none"

    ErrorMessage="标识不能为空!"></asp:RequiredFieldValidator>

<asp:RequiredFieldValidator ID="rfNameValue" runat="server"

    ControlToValidate="tbName" Display="none" InitialValue="请输入标识"

    ErrorMessage="标识不能为空!"></asp:RequiredFieldValidator>

<asp:RegularExpressionValidator ID="revName" runat="server"

    ControlToValidate="tbName" Display="none"

    ErrorMessage="标识的长度最大为50,请重新输入。"

    ValidationExpression=".{1,50}"></asp:RegularExpressionValidator>

<ajaxToolkit:TextBoxWatermarkExtender ID="wmeName" runat="server"

    TargetControlID="tbName" WatermarkText="请输入标识"

    WatermarkCssClass="Watermark">

    </ajaxToolkit:TextBoxWatermarkExtender>

<ajaxToolkit:ValidatorCalloutExtender ID="vceNameBlank" runat="server"

    TargetControlID="rfNameBlank" HighlightCssClass="Validator">

    </ajaxToolkit:ValidatorCalloutExtender>

<ajaxToolkit:ValidatorCalloutExtender ID="vceNameValue" runat="server"

    TargetControlID="rfNameValue" HighlightCssClass="Validator">

    </ajaxToolkit:ValidatorCalloutExtender>

<ajaxToolkit:ValidatorCalloutExtender ID="vceNameRegex" runat="server"

    TargetControlID="revName" HighlightCssClass="Validator">

    </ajaxToolkit:ValidatorCalloutExtender>

下述程序代码声明了1个TextBox控件,用来输入RSS源的地址,其ID属性的值为tbUrl。该控件使用了1个TextBoxWatermarkExtender控件和3个ValidatorCalloutExtender控件,它们的ID属性的值分别为tweUrl、vceUrlBlank、vceUrlValue和vceUrlRegex。其中,tweUrl控件为tbUrl控件显示水印值“请输入地址”;vceUrlBlank、vceUrlValue和vceUrlRegex控件分别以提示样式显示验证结果。

另外,tbUrl控件使用2个RequiredFieldValidator控件和1个RegularExpressionValidator控件,它们的ID属性的值分别为rfUrlBlank、rfUrlValue和revUrl。其中,rfUrlBlank控件验证tbUrl控件的内容不能为空;rfUrlValue控件验证tbUrl控件的内容不能等于“请输入地址”(tweUrl水印控件的水印值),这样可以防止用户不输入任何内容就提交新的RSS源地址到数据库;revUrl控件验证tbUrl控件内容是否为合法的URL。

链接地址:<asp:TextBox ID="tbUrl" runat="server" SkinID="tbSkin" Width="60%"

    MaxLength="50"></asp:TextBox>

<asp:RequiredFieldValidator ID="rfUrlBlank" runat="server"

    ControlToValidate="tbUrl" Display="none"

    ErrorMessage="地址不能为空!"></asp:RequiredFieldValidator>

<asp:RequiredFieldValidator ID="rfUrlValue" runat="server"

    ControlToValidate="tbUrl" Display="none" InitialValue="请输入地址"

    ErrorMessage="地址不能为空!"></asp:RequiredFieldValidator>

<asp:RegularExpressionValidator ID="revUrl" runat="server"

    ControlToValidate="tbUrl" Display="none"

    ErrorMessage="链接地址的格式不正确,请重新输入。"

    ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?">

    </asp:RegularExpressionValidator>

<ajaxToolkit:TextBoxWatermarkExtender ID="tweUrl" runat="server"

    TargetControlID="tbUrl" WatermarkText="请输入地址"

    WatermarkCssClass="Watermark">

</ajaxToolkit:TextBoxWatermarkExtender>

<ajaxToolkit:ValidatorCalloutExtender ID="vceUrlBlank" runat="server"

    TargetControlID="rfUrlBlank" HighlightCssClass="Validator">

    </ajaxToolkit:ValidatorCalloutExtender>

<ajaxToolkit:ValidatorCalloutExtender ID="vceUrlValue" runat="server"

    TargetControlID="rfUrlValue" HighlightCssClass="Validator">

    </ajaxToolkit:ValidatorCalloutExtender>

<ajaxToolkit:ValidatorCalloutExtender ID="vceUrlRegex" runat="server"

    TargetControlID="revUrl" HighlightCssClass="Validator">

    </ajaxToolkit:ValidatorCalloutExtender>

下述程序代码声明了1个Button控件,其ID属性的值分别为btnCommit。btnCommit控件可以将用户输入的RSS源提交到数据库中。

<asp:UpdatePanel ID="upbutton" runat="server"><ContentTemplate>

    <asp:Button ID="btnCommit" runat="server" Text="提交" SkinID="btnSkin"

        Width="100px" OnClick="btnCommit_Click" />

</ContentTemplate></asp:UpdatePanel>

下述程序代码声明了AddUrl.aspx页面所必需的“@Page”指令和ScriptManager控件等内容。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddUrl.aspx.cs"

    Inherits="AddUrl" StylesheetTheme="ASPNETAjaxWeb" %>

<head id="Head1" runat="server"><title>收藏RSS地址</title></head>

<asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

综上所述,AddUrl.aspx页面的设计界面如图11.4所示。

图11.4  AddUrl.aspx页面的设计界面

2.事件设计

用户单击AddUrl.aspx页面中的【提交】按钮(btnCommit控件)时,将触发btnCommit控件的Click事件:btnCommit_Click(object sender,EventArgs e)。

在下述程序代码中,btnCommit_Click(object sender,EventArgs e)事件实现了将用户输入的RSS源提交到数据库的功能。该事件调用Rss类中的AddRss(string name, string url)方法将新的RSS源提交到数据库。若上述操作成功,则重定向到RSS源管理页面UrlManage.aspx。

protected void btnCommit_Click(object sender,EventArgs e)

{   ///添加新的链接地址

    Rss rss = new Rss();

    if(rss.AddRss(tbName.Text,tbUrl.Text) > 0)

    {   ///重定向到管理页面

        Response.Redirect("~/UrlManage.aspx");

    }

}

 11.2.3  修改RSS源

修改RSS源由UpdateUrl.aspx页面实现,UpdateUrl.aspx.cs文件为它的代码隐藏文件。该页面提供了修改RSS源的标识和地址,以及将修改后的RSS源提交到数据库中的功能。UpdateUrl.aspx页面的效果图如图11.5所示。

图11.5  UpdateUrl.aspx页面的效果图

1.界面设计

UpdateUrl.aspx页面添加了2个TextBox控件和1个Button控件,它们的ID属性的值分别为tbName、tbUrl和btnCommit。由于该页面的设计界面和UpdateUrl.aspx页面的设计界面非常相似,因此,在此不做详细介绍。

下述程序代码声明了UpdateUrl.aspx页面所必需的“@Page”指令和ScriptManager控件等内容。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpdateUrl.aspx.cs"

    Inherits="UpdateUrl" StylesheetTheme="ASPNETAjaxWeb" %>

<head id="Head1" runat="server"><title>修改RSS地址</title></head>

<asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

综上所述,UpdateUrl.aspx页面的设计界面如图11.6所示。

2.初始化

UpdateUrl.aspx.cs文件首先引入了2个新的命名空间:System.Data.SqlClient和ASPNETAJAXWeb. AjaxRss,然后定义了1个变量:urlID。其中,urlID变量用来保存被修改RSS源的ID值,它的值从UpdateUrl.aspx页面的地址栏中获取。实现上述功能的程序代码如下:

///引入新的命名空间

using ASPNETAJAXWeb.AjaxRss;

using System.Data.SqlClient;

int urlID = -1;

UpdateUrl.aspx页面的初始化功能由其Page_Load(object sender, EventArgs e)事件实现。在下述程序代码中,该事件首先设置urlID变量的值,然后调用BindPageData(int urlID)函数读取并显示被修改RSS源的属性:标识和地址。其中,读取数据由Rss类的GetSingleRss(int rssID)方法(返回SqlDataReader类型的对象)实现。

图11.6  UpdateUrl.aspx页面的设计界面

另外,Page_Load(object sender, EventArgs e)事件还根据urlID变量的值设置btnCommit控件的可用性。如果urlID变量的值大于0,则该控件可用,否则不可用。

protected void Page_Load(object sender,EventArgs e)

{   ///获取被修改数据的ID

    if(Request.Params["UrlID"] != null)

    {

        urlID = Int32.Parse(Request.Params["UrlID"].ToString());

    }

    ///显示被修改的数据

    if(!Page.IsPostBack && urlID > 0){BindPageData(urlID);}

    ///设置按钮是否可用

    btnCommit.Enabled = urlID > 0 ? true : false;

}

private void BindPageData(int urlID)

{   ///读取数据

    Rss rss = new Rss();

    SqlDataReader dr = rss.GetSingleRss(urlID);

    if(dr == null) return;

    if(dr.Read())

    {   ///显示数据

        tbName.Text = dr["Name"].ToString();

        tbUrl.Text = dr["Url"].ToString();

    }

    dr.Close();

}

3.事件设计

用户单击UpdateUrl.aspx页面中的【提交】按钮(btnCommit控件)时,将触发btnCommit控件的Click事件:btnCommit_Click(object sender,EventArgs e)。

在下述程序代码中,btnCommit_Click(object sender,EventArgs e)事件实现了将用户修改后的RSS源提交到数据库的功能。该事件调用Rss类中的UpdateRss(int rssID,string name, string url)方法将用户修改后的RSS源提交到数据库。若上述操作成功,则重定向到RSS源管理页面UrlManage.aspx。

protected void btnCommit_Click(object sender,EventArgs e)

{

    Rss rss = new Rss();

    ///修改RSS地址的属性

    if(rss.UpdateRss(urlID,tbName.Text,tbUrl.Text) > 0)

    {   ///重定向到管理页面

        Response.Redirect("~/UrlManage.aspx");

    }

}

 11.2.4  管理RSS源

管理RSS源由UrlManage.aspx页面实现,UrlManage.aspx.cs文件为它的代码隐藏文件。该页面提供了以列表形式显示RSS源、重定向到修改RSS源和创建新RSS源的链接,以及删除RSS源的功能。UrlManage.aspx页面的效果图如图11.7所示。

图11.7  UrlManage.aspx页面的效果图

1.界面设计

UrlManage.aspx页面添加了1个GridView控件和1个Button控件,它们的ID属性的值分别为gvCategory和btnAdd。

在下述程序代码中,gvUrl控件以列表形式显示RSS源。其中,第1列显示RSS源的名称,并且单击该名称可以查看该源的具体内容;第2列显示操作(修改和删除)RSS源的图片按钮。

<asp:UpdatePanel runat="server" ID="up"><ContentTemplate>

<asp:GridView ID="gvUrl" runat="server" Width="100%"

    AutoGenerateColumns="False" SkinID="gvSkin"

    OnRowCommand="gvUrl_RowCommand" OnRowDataBound="gvUrl_RowDataBound"

    AllowPaging="True" OnPageIndexChanging="gvUrl_PageIndexChanging">

    <Columns>

        <asp:TemplateField HeaderText="地址标识"><ItemTemplate>

            <a href='<%# Eval("Url") %>'><%# Eval("Name") %></a>

        </ItemTemplate></asp:TemplateField>

        <asp:TemplateField HeaderText="链接地址"><ItemTemplate>

            <%# Eval("Url") %>

        </ItemTemplate>

        </asp:TemplateField>

        <asp:TemplateField HeaderText="操作"><ItemTemplate>

            <asp:ImageButton ID="imgUpdate" runat="server"

                CommandArgument='<%# Eval("ID") %>'

                ImageUrl="~/App_Themes/ASPNETAjaxWeb/Images/edit.PNG"

                CommandName="update" />&nbsp;

            <asp:ImageButton ID="imgDelete" runat="server"

            CommandArgument='<%# Eval("ID") %>'

            ImageUrl="~/App_Themes/ASPNETAjaxWeb/Images/delete.PNG"

            CommandName="del" />

        </ItemTemplate></asp:TemplateField>

    </Columns>

    <PagerSettings Mode="NextPreviousFirstLast" />

</asp:GridView>

</ContentTemplate></asp:UpdatePanel>

下述程序代码声明了1个Button控件,其ID属性的值为btnAdd。单击此控件可以重定向到创建新的RSS源的页面AddUrl.aspx。

<asp:Button ID="btnAdd" runat="server" Text="添加新的RSS地址"

    OnClick="btnAdd_Click" SkinID="btnSkin" />

下述程序代码声明了UrlManage.aspx页面所必需的“@Page”指令和ScriptManager控件等内容。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UrlManage.aspx.cs"

    Inherits="UrlManage" StylesheetTheme="ASPNETAjaxWeb" %>

<head id="Head1" runat="server"><title>RSS地址管理</title></head>

<asp:ScriptManager ID="sm" runat="server" ></asp:ScriptManager>

综上所述,UrlManage.aspx页面的设计界面如图11.8所示。

图11.8  UrlManage.aspx页面的设计界面

2.初始化

UrlManage.aspx.cs文件引入了ASPNETAJAXWeb.AjaxRss命名空间。实现上述功能的程序代码如下:

///引入新的命名空间

using ASPNETAJAXWeb.AjaxRss;

UrlManage.aspx页面的初始化功能由其Page_Load(object sender, EventArgs e)事件实现。在下述程序代码中,该事件调用BindPageData()函数读取并显示RSS源的信息:标识和地址。其中,读取数据由Rss类的GetRsses()方法(返回DataSet类型的对象)实现。

protected void Page_Load(object sender,EventArgs e)

{

    if(!Page.IsPostBack){BindPageData();}

}

private void BindPageData()

{   ///获取数据

    Rss rss = new Rss();

    DataSet ds = rss.GetRsses();

    ///显示数据

    gvUrl.DataSource = ds;

    gvUrl.DataBind();

}

3.事件设计

gvUrl控件定义了RowDataBound事件——gvUrl_RowDataBound(object sender, GridViewRow EventArgs e)。在下述程序代码中,该事件在gvUrl控件的每一行数据绑定之后触发,它为每一行中的删除按钮(imgDelete控件)添加了一个删除确认对话框。

protected void gvUrl_RowDataBound(object sender,GridViewRowEventArgs e)

{   ///添加删除确认对话框

    ImageButton imgDelete = (ImageButton)e.Row.FindControl("imgDelete");

    if(imgDelete != null)

    {

        imgDelete.Attributes.Add("onclick",

            "return confirm(\"您确认要删除当前行的RSS地址吗?\");");

    }

}

gvUrl控件定义了RowCommand事件——gvUrl_RowCommand(object sender, GridViewRow EventArgs e)。在下述程序代码中,该事件在用户单击gvUrl控件的每一行中的按钮之后触发。如果被单击按钮的CommandName属性的值为“update”,则重定向到修改RSS源的页面UpdateUrl.aspx,并将被修改RSS源的ID值传递到该页面;如果被单击按钮的CommandName属性的值为“del”,则调用Rss类的DeleteUrl(int urlID)方法删除当前行的RSS源,并重新显示RSS源信息。

protected void gvUrl_RowCommand(object sender,GridViewCommandEventArgs e)

{

    if(e.CommandName.ToLower() == "update")

    {   ///重定向到修改RSS地址页面

        Response.Redirect("~/UpdateUrl.aspx?UrlID="

            + e.CommandArgument.ToString());

        return;

    }

    if(e.CommandName.ToLower() == "del")

    {   ///删除选择的RSS地址

        Rss rss = new Rss();

        if(rss.DeleteRss(Int32.Parse(e.CommandArgument.ToString())) > 0)

        {

            BindPageData();

        }

        return;

    }

}

用户单击UrlManage.aspx页面中的【添加新的RSS地址】按钮(btnAdd控件)时,将触发btnAdd控件的Click事件:btnAdd_Click(object sender,EventArgs e)。

在下述程序代码中,btnAdd_Click(object sender,EventArgs e)事件实现了重定向到创建新的RSS源的页面AddUrl.aspx功能。

protected void btnAdd_Click(object sender,EventArgs e)

{

    Response.Redirect("~/AddUrl.aspx");

}

4.分页设计

gvUrl控件启用了分页功能,并设置分页模式为NextPreviousFirstLast,同时还定义了分页事件:gvUrl_PageIndexChanging(object sender,GridViewPageEventArgs e)。在下述程序代码中,该事件首先设置gvUrl控件的新页码,然后重新绑定gvUrl控件的数据,并显示RSS源信息。

protected void gvUrl_PageIndexChanging(object sender,

    GridViewPageEventArgs e)

{   ///设置新的页码,并重新显示数据

    gvUrl.PageIndex = e.NewPageIndex;

    BindPageData();

}

11.3  RSS阅读器

RSS阅读器提供了在线阅读RSS源的功能,如以分页的方式显示RSS源的内容、扩展和收缩阅读版面等。

 11.3.1  RSS阅读面板

RSS阅读面板由Default.aspx页面实现,Default.aspx.cs文件为它的代码隐藏文件。该页面提供了自动扩展和收缩的面板显示RSS源的内容。Default.aspx页面的效果图如图11.9所示。

1.界面设计

Default.aspx页面添加了1个GridView控件,其ID属性的值为gvUrl。在下述程序代码中,gvUrl控件以列表形式显示RSS源的内容,且每一个显示RSS源的内容版面可以自动扩展和收缩。gvUrl控件只包含一个模板域(TemplateField),该域组成结构如图11.10所示。用户单击【RSS源的标识】区域可以扩展或者收缩(折叠)RSS源的内容版面。

          

图11.9  Default.aspx页面的效果图                 图11.10  RSS源阅读器的阅读区域

RSS源的内容版面由一个Panel控件和一个iframe控件组成。iframe控件的src属性的值为“ReaderRss.aspx?RssUrl=<%# Eval("Url") %>”,它将显示ReaderRss.aspx页面的内容。

注意:RSS源的内容版面的自动扩展或者收缩功能将在11.3.2小节中介绍。

<asp:UpdatePanel runat="server" ID="up"><ContentTemplate>

<asp:GridView ID="gvUrl" runat="server" Width="100%"

    AutoGenerateColumns="False" SkinID="gvSkin" AllowPaging="True"

    OnPageIndexChanging="gvUrl_PageIndexChanging">

    <Columns>

        <asp:TemplateField HeaderText="AJAX RSS阅读器"><ItemTemplate>

            <asp:Label ID="lbName" runat="server" Width="100%"

                BackColor="#DAEEEE" CssClass="RssExpandCollapse"

                Font-Bold="True" ForeColor="#0361D4" Font-Names="Tahoma"

                BorderStyle="Solid" BorderWidth="1px">

            <a href='ReaderRss.aspx?RssUrl=<%# Eval("Url") %>'><%#

            Eval("Name") %></a></asp:Label><br />

            <asp:Panel ID="pContent" runat="server">

            <iframe frameborder="0" src='ReaderRss.aspx?RssUrl=<%#

                Eval("Url") %>' width="100%" height="200"></iframe>

            </asp:Panel>

            <ajaxToolkit:CollapsiblePanelExtender ID="cpeRss"

                runat="server" ExpandControlID="lbName"

                CollapseControlID="lbName" AutoCollapse="true"

                AutoExpand="true" ExpandDirection="Vertical"

                ExpandedSize="200" ScrollContents="false"

                TargetControlID="pContent"

                TextLabelID="lbName">

            </ajaxToolkit:CollapsiblePanelExtender>

        </ItemTemplate></asp:TemplateField>

    </Columns>

    <PagerSettings Mode="NextPreviousFirstLast" />

</asp:GridView>

</ContentTemplate></asp:UpdatePanel>

下述程序代码声明了Default.aspx页面所必需的“@Page”指令和ScriptManager控件等内容。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"

    Inherits="_Default" StylesheetTheme="ASPNETAjaxWeb" %>

<head runat="server"><title>AJAX RSS阅读器</title></head>

<asp:ScriptManager ID="sm" runat="server" ></asp:ScriptManager>

综上所述,Default.aspx页面的设计界面如图11.11所示。

图11.11  Default.aspx页面的设计界面

2.初始化

Default.aspx.cs文件首先引入了ASPNETAJAXWeb.AjaxRss命名空间。实现上述功能的程序代码如下:

///引入新的命名空间

using ASPNETAJAXWeb.AjaxRss;

Default.aspx页面的初始化功能由其Page_Load(object sender, EventArgs e)事件实现。在下述程序代码中,该事件调用BindPageData()函数读取并显示RSS源的信息。其中,读取数据由Rss类的GetRsses()方法(返回DataSet类型的对象)实现。

protected void Page_Load(object sender,EventArgs e)

{

    if(!Page.IsPostBack){BindPageData();}

}

private void BindPageData()

{   ///获取数据

    Rss rss = new Rss();

    DataSet ds = rss.GetRsses();

    ///显示数据

    gvUrl.DataSource = ds;

    gvUrl.DataBind();

}

 11.3.2  自动扩展和收缩阅读面板

RSS源的阅读面板的自动扩展和收缩功能由CollapsiblePanelExtender控件cpeRss实现。该控制指定扩展和收缩面板的ID值为pContent,扩展的方向为垂直方向(Vertical),扩展的最大高度为200。声明CollapsiblePanelExtender控件cpeRss的HTML代码如下:

<ajaxToolkit:CollapsiblePanelExtender ID="cpeRss"

    runat="server" ExpandControlID="lbName"

    CollapseControlID="lbName" AutoCollapse="true"

    AutoExpand="true" ExpandDirection="Vertical"

    ExpandedSize="200" ScrollContents="false"

    TargetControlID="pContent"

    TextLabelID="lbName">

</ajaxToolkit:CollapsiblePanelExtender>

当RSS源的阅读面板处于收缩时,效果如图11.12所示。用户单击RSS源的阅读面板中每一个RSS源的标识(如“sina1”、“sina23”等),就可以展开其阅读面板。

图11.12  RSS源的收缩(折叠)式的阅读面板

 11.3.3  分页式阅读

Default.aspx页面还启用了gvUrl控件的分页功能,即用户能够以分页式方式阅读RSS源的内容。其中,gvUrl控件的分页模式设置为NextPreviousFirstLast,分页事件定义为gvCategory_ PageIndexChanging(object sender,GridViewPageEventArgs e)。在下述程序代码中,该事件首先设置gvUrl控件的新页码,然后重新绑定gvUrl控件的数据,并显示RSS源的内容。

protected void gvUrl_PageIndexChanging(object sender,

    GridViewPageEventArgs e)

{   ///设置新的页码,并重新显示数据

    gvUrl.PageIndex = e.NewPageIndex;

    BindPageData();

}

 11.3.4  显示RSS源的内容

显示RSS源的内容由ReaderRss.aspx页面实现,ReaderRss.aspx.cs文件为它的代码隐藏文件。该页面非常简单,它在Page_Load(object sender,EventArgs e)事件中获取RSS源的地址,并重定向到RSS源的地址指定页面。实现上述功能的程序代码如下:

string url = string.Empty;

protected void Page_Load(object sender, EventArgs e)

{   ///重定向到RSS的网页

    if(Request.Params["RssUrl"] != null)

    {

        url = Request.Params["RssUrl"].ToString();

        Response.Redirect(url);

    }

}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论