一個簡單asp.net下Web RSS控件,支持數據綁定列設置,綁定到DataTable數據源。 設計模式中輸出位html的幫助信息。正式用的時候。WebRss.OutRss(); 輸出標準XML格式的RSS文檔
{
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);
}
}
}