一个简单asp.net下Web RSS控件,支持数据绑定列设置,绑定到DataTable数据源。 设计模式中输出位html的帮助信息。正式用的时候。WebRss.OutRss(); 输出标准XML格式的RSS文档
namespace
WebControls
... {
public class WebRSS : WebControl
...{
private object m_DataSource;
public WebRSS()
...{
m_ItemDescriptionField = "Description";
m_ItemLinkField = "Link";
m_ItemPubDateField = "PubDate";
m_ItemTitleField = "Title";
this.Init += new EventHandler(WebRSS_Init);
}
void WebRSS_Init(object sender, EventArgs e)
...{
}
private string m_Title, m_Link, m_Description, m_Language, m_ItemTitleField, m_ItemDescriptionField, m_ItemPubDateField, m_ItemLinkField;
[Category("RSS基本属性")]
[Description("RSS频道名称")]
public string Title
...{
get...{ return m_Title;}
set ...{ m_Title = value; }
}
[Category("RSS基本属性")]
[Description("RSS频道连接地址")]
public string Link
...{
get ...{ return m_Link; }
set ...{ m_Link = value; }
}
[Category("RSS基本属性")]
[Description("RSS频道说明")]
public string Description
...{
get ...{ return m_Description; }
set ...{ m_Description = value; }
}
[Category("RSS基本属性")]
[Description("RSS频道语言")]
public string Language
...{
get ...{ return m_Language; }
set ...{ m_Language = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项标题列名")]
public string ItemTitleField
...{
get ...{ return m_ItemTitleField; }
set ...{ m_ItemTitleField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项描述列名")]
public string ItemDescriptionField
...{
get ...{ return m_ItemDescriptionField; }
set ...{ m_ItemDescriptionField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项发布时间列名")]
public string ItemPubDateField
...{
get ...{ return m_ItemPubDateField; }
set ...{ m_ItemPubDateField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项连接地址列名")]
public string ItemLinkField
...{
get ...{ return m_ItemLinkField; }
set ...{ m_ItemLinkField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项数据源")]
public object DataSource
...{
get ...{ return m_DataSource; }
set ...{ m_DataSource = value; }
}
private void DataBindItem()
...{
/**//**/
string templet = @"<asp:Repeater id=""myRepeater"" runat=""server"">
<ItemTemplate><item>
<title><%#DataBinder.Eval(Container.DataItem,"""+m_ItemTitleField+@"""%></title>
<description><![CDATA[<%#DataBinder.Eval(Container.DataItem,""" + m_ItemDescriptionField + @"""%>]]></description>
<pubDate><%#DataBinder.Eval(Container.DataItem,""" + m_ItemPubDateField + @"""%></pubDate>
<link><%#DataBinder.Eval(Container.DataItem, """ + m_ItemLinkField + @""" %></link>
</item>
</ItemTemplate>
</asp:Repeater>
";
Repeater r = new Repeater();
this.Controls.Add(r);
}
/**//// <summary>
/// 输出RSS聚合内容
/// </summary>
public void OutRss()
...{
StringBuilder rss = new StringBuilder();
rss.AppendLine("<rss version="2.0">");
rss.AppendLine("<channel>");
rss.AppendLine("<title>"+m_Title +"</title>");
rss.AppendLine("<link>" + m_Link + "</link>");
rss.AppendLine("<description>" + m_Description + "</description>");
rss.AppendLine("<language>zh-cn</language>");
rss.AppendLine("<pubdate>" + DateTime.Now.ToString() + "</pubdate>");
System.Collections.IEnumerable ie = m_DataSource as System.Collections.IEnumerable;
if (ie != null)
...{
System.Collections.IEnumerator ie2 = ie.GetEnumerator();
DataRowView dr;
while (ie2.MoveNext())
...{
dr = ie2.Current as DataRowView;
rss.AppendLine(@"<item>
<title>" + Common.ToString(dr[m_ItemTitleField]) + @"</title>
<description><![CDATA[" + Common.ToString(dr[m_ItemDescriptionField]) + @"]]></description>
<pubDate>" + Common.ToString(dr[m_ItemPubDateField]) + @"</pubDate>
<link>" + Common.ToString(dr[m_ItemLinkField]) + @"</link>
</item>");
}
}
rss.AppendLine("</channel>");
rss.AppendLine("</rss>");
if (Page.Response != null)
...{
Page.Response.Clear();
Page.Response.Expires = 0;
Page.Response.ContentType = "text/xml";
Page.Response.ContentEncoding = Encoding.UTF8;
Page.Response.Write(rss.ToString());
Page.Response.End();
}
}
protected override string TagName
...{
get
...{
return "channel";
}
}
protected override void RenderContents(HtmlTextWriter writer)
...{
DataBindItem();
if (DesignMode)
...{
writer.WriteLine("标题:" + m_Title); writer.WriteBreak();
writer.WriteLine("连接:" + m_Link); writer.WriteBreak();
writer.WriteLine("描述:" + m_Description); writer.WriteBreak();
writer.WriteLine("语言:" + m_Language); writer.WriteBreak();
for (int i = 0; i < 3; i++)
...{
writer.WriteBreak();
writer.WriteLine("RSS项标题:绑定列(" + m_ItemTitleField + ")"); writer.WriteBreak();
writer.WriteLine("RSS项连接:绑定列(" + m_ItemLinkField + ")"); writer.WriteBreak();
writer.WriteLine("RSS项说明:绑定列(" + m_ItemDescriptionField + ")"); writer.WriteBreak();
writer.WriteLine("RSS项时间:绑定列(" + m_ItemPubDateField + ")"); writer.WriteBreak();
}
}
else
...{
writer.WriteLine("应该输出为XML格式。"); writer.WriteBreak();
}
base.RenderContents(writer);
}
}
}
... {
public class WebRSS : WebControl
...{
private object m_DataSource;
public WebRSS()
...{
m_ItemDescriptionField = "Description";
m_ItemLinkField = "Link";
m_ItemPubDateField = "PubDate";
m_ItemTitleField = "Title";
this.Init += new EventHandler(WebRSS_Init);
}
void WebRSS_Init(object sender, EventArgs e)
...{
}
private string m_Title, m_Link, m_Description, m_Language, m_ItemTitleField, m_ItemDescriptionField, m_ItemPubDateField, m_ItemLinkField;
[Category("RSS基本属性")]
[Description("RSS频道名称")]
public string Title
...{
get...{ return m_Title;}
set ...{ m_Title = value; }
}
[Category("RSS基本属性")]
[Description("RSS频道连接地址")]
public string Link
...{
get ...{ return m_Link; }
set ...{ m_Link = value; }
}
[Category("RSS基本属性")]
[Description("RSS频道说明")]
public string Description
...{
get ...{ return m_Description; }
set ...{ m_Description = value; }
}
[Category("RSS基本属性")]
[Description("RSS频道语言")]
public string Language
...{
get ...{ return m_Language; }
set ...{ m_Language = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项标题列名")]
public string ItemTitleField
...{
get ...{ return m_ItemTitleField; }
set ...{ m_ItemTitleField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项描述列名")]
public string ItemDescriptionField
...{
get ...{ return m_ItemDescriptionField; }
set ...{ m_ItemDescriptionField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项发布时间列名")]
public string ItemPubDateField
...{
get ...{ return m_ItemPubDateField; }
set ...{ m_ItemPubDateField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项连接地址列名")]
public string ItemLinkField
...{
get ...{ return m_ItemLinkField; }
set ...{ m_ItemLinkField = value; }
}
[Category("RSS项绑定属性")]
[Description("RSS项数据源")]
public object DataSource
...{
get ...{ return m_DataSource; }
set ...{ m_DataSource = value; }
}
private void DataBindItem()
...{
/**//**/
string templet = @"<asp:Repeater id=""myRepeater"" runat=""server"">
<ItemTemplate><item>
<title><%#DataBinder.Eval(Container.DataItem,"""+m_ItemTitleField+@"""%></title>
<description><![CDATA[<%#DataBinder.Eval(Container.DataItem,""" + m_ItemDescriptionField + @"""%>]]></description>
<pubDate><%#DataBinder.Eval(Container.DataItem,""" + m_ItemPubDateField + @"""%></pubDate>
<link><%#DataBinder.Eval(Container.DataItem, """ + m_ItemLinkField + @""" %></link>
</item>
</ItemTemplate>
</asp:Repeater>
";
Repeater r = new Repeater();
this.Controls.Add(r);
}
/**//// <summary>
/// 输出RSS聚合内容
/// </summary>
public void OutRss()
...{
StringBuilder rss = new StringBuilder();
rss.AppendLine("<rss version="2.0">");
rss.AppendLine("<channel>");
rss.AppendLine("<title>"+m_Title +"</title>");
rss.AppendLine("<link>" + m_Link + "</link>");
rss.AppendLine("<description>" + m_Description + "</description>");
rss.AppendLine("<language>zh-cn</language>");
rss.AppendLine("<pubdate>" + DateTime.Now.ToString() + "</pubdate>");
System.Collections.IEnumerable ie = m_DataSource as System.Collections.IEnumerable;
if (ie != null)
...{
System.Collections.IEnumerator ie2 = ie.GetEnumerator();
DataRowView dr;
while (ie2.MoveNext())
...{
dr = ie2.Current as DataRowView;
rss.AppendLine(@"<item>
<title>" + Common.ToString(dr[m_ItemTitleField]) + @"</title>
<description><![CDATA[" + Common.ToString(dr[m_ItemDescriptionField]) + @"]]></description>
<pubDate>" + Common.ToString(dr[m_ItemPubDateField]) + @"</pubDate>
<link>" + Common.ToString(dr[m_ItemLinkField]) + @"</link>
</item>");
}
}
rss.AppendLine("</channel>");
rss.AppendLine("</rss>");
if (Page.Response != null)
...{
Page.Response.Clear();
Page.Response.Expires = 0;
Page.Response.ContentType = "text/xml";
Page.Response.ContentEncoding = Encoding.UTF8;
Page.Response.Write(rss.ToString());
Page.Response.End();
}
}
protected override string TagName
...{
get
...{
return "channel";
}
}
protected override void RenderContents(HtmlTextWriter writer)
...{
DataBindItem();
if (DesignMode)
...{
writer.WriteLine("标题:" + m_Title); writer.WriteBreak();
writer.WriteLine("连接:" + m_Link); writer.WriteBreak();
writer.WriteLine("描述:" + m_Description); writer.WriteBreak();
writer.WriteLine("语言:" + m_Language); writer.WriteBreak();
for (int i = 0; i < 3; i++)
...{
writer.WriteBreak();
writer.WriteLine("RSS项标题:绑定列(" + m_ItemTitleField + ")"); writer.WriteBreak();
writer.WriteLine("RSS项连接:绑定列(" + m_ItemLinkField + ")"); writer.WriteBreak();
writer.WriteLine("RSS项说明:绑定列(" + m_ItemDescriptionField + ")"); writer.WriteBreak();
writer.WriteLine("RSS项时间:绑定列(" + m_ItemPubDateField + ")"); writer.WriteBreak();
}
}
else
...{
writer.WriteLine("应该输出为XML格式。"); writer.WriteBreak();
}
base.RenderContents(writer);
}
}
}