今天請到一位Repeater老前輩
這個控制項可以依照設計的樣板
反覆配合資料庫取得的資料產生定義的格式內容
有些類似GridView,只是所有內容都要靠自己編輯設計。(同時也可以因應這種特殊格式需求)
全名叫做**「 Really Simple Syndication 」**
一般稱為**「 簡易供稿機制 」**
它是一種以XML(eXtensible Markup Language)格式為基礎的內容傳送機制
簡單來說就在網站上放了一個符合RSS規則的XML檔,稱為「 RSS Feed 」
提供給讀者訂閱(配合其他讀取器RSS Reader)
稍微講解一下格式規範:
<?xml version="1.0" encoding="utf-8" ?> //XML的編碼
<rss version="2.0">
// RSS 版本為 2.0
<channel>
//頻道的標籤
<item>
// 項目的標籤
<title> </title> //標題
<link>http.......</link> //網址
<pubDate>Sun, 13 Apr 2014 12:12:12 -0800</pubDate> 更新時間(需轉換成對應格式)
<description></description> // 第一個項目的描述結尾
</item>
</channel>
</rss>
(當然還有許多其他敘述標籤,只是簡單示範一下而已)
而我們要做的就是重複產生裡頭的item項目
首先我們要建立一個Rss.aspx來做產生Feed的網頁
把裡頭html部分的tag全部移除只留下@Page定義
並且放上RSS的規則
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Rss.aspx.cs" Inherits="ECalendar.Rss" %><?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>鐵人文章</title>
<language>zh-tw</language>
<item>
<title></title>
<description></description>
<pubDate></pubDate>
<link></link>
</item>
</channel>
</rss>
設計畫面應該會變成如此:
測試一下:
可能變成瀏覽器沒判讀出來是XML格式所以不會顯示節點內容,
但是從網頁原始碼已是可以檢驗內容是否正確
(我也不清楚為何會這樣..)
接著就可以加入Repeater與SqlDataSource像是迴圈一樣不斷產生內容
Item內容是我們要重複產生的資料樣板所以要被包含在Repeater裡面讓它重複做資料連接
像這樣:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Rss.aspx.cs" Inherits="WebApplication3.Rss" %><?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>鐵人文章</title>
<language>zh-tw</language>
<asp:Repeater id="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<item>
<title><%#Eval("title")%></title>
<description><%#Eval("Content")%></description>
<pubDate><%#string.Format("{0:R}",Eval("Date"))%></pubDate>
<link><%#"Content.aspx?dataID="+ Eval("ID") %></link></item>
</ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Table]"></asp:SqlDataSource>
</channel>
</rss>
註:string.Format是要調整時間格式 R是轉換輸出RFC1123 的日期時間格式,而RSS的時間格式是RFC822
兩者似乎相容的樣子
輸出後的樣子:
這樣就大公告成囉!!!
編譯後在單機上的在Rss Reader測試一下:
可以正確讀取資料唷!!
有一個Bug難以處理(上方時間自動+8小時!!!),就是要調整GMT+-8的輸出.......不知道有沒有人發現
=====================================
更新:
突然發現一篇文章http://www.dotnetperls.com/pubdate
提供的程式碼稍微做一下修改:
public string DateString(string str)
{
DateTime pubDate = DateTime.Parse(str);
var value = pubDate.ToString("ddd',' d MMM yyyy HH':'mm':'ss") +
" " +
pubDate.ToString("zzzz").Replace(":", "");
return value;
}
並且修改為
DateString(Eval("Date").ToString())
重新套上就可以解決囉!!!!
真是太好了!!!!
最近因為公司交待要摸RSS,嘗試一天下來有幾個問題 ..
主管是丟一個叫ASPNETRSSToolkit的關鍵字給我
測試的確可以用ashx得到RSS格式的內容,但用RSS Reader都讀不出來
一樣的內容我改成.xml的話RSS Reader就讀的出來了
不知道為什麼會這樣子 X_X
我一開始是想嚐試不要用工具,且用aspx來呈現
查到的方法有兩個,一個是像您這個方式用Repeater
另外是先在程式碼部份做response.clear
然後再用XmlTextWriter自己一行一行寫上去
但不管要用哪個方法…我光是在aspx那裡加上的標籤就會出現錯誤了
錯誤訊息是寫HTML5不支援'rss'元素
我的IDE是VS2017,不曉得是不是版本的問題 orz