iT邦幫忙

DAY 20
0

給學弟的ASP.NET網頁學習經驗系列 第 20

ASP.NET學習經驗#20----Rss如何產出?老前輩Repeater:我幫你

  • 分享至 

  • xImage
  •  

今天請到一位Repeater老前輩

這個控制項可以依照設計的樣板

反覆配合資料庫取得的資料產生定義的格式內容

有些類似GridView,只是所有內容都要靠自己編輯設計。(同時也可以因應這種特殊格式需求)

什麼是RSS?

全名叫做**「 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())

重新套上就可以解決囉!!!!

真是太好了!!!!


上一篇
ASP.NET學習經驗#19----DataBound給你千變萬化的可能
下一篇
ASP.NET學習經驗#21----產生XML內容的XmlTextWriter
系列文
給學弟的ASP.NET網頁學習經驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
rainbowrain
iT邦新手 2 級 ‧ 2018-03-27 16:42:43

最近因為公司交待要摸RSS,嘗試一天下來有幾個問題 ..
主管是丟一個叫ASPNETRSSToolkit的關鍵字給我
測試的確可以用ashx得到RSS格式的內容,但用RSS Reader都讀不出來
一樣的內容我改成.xml的話RSS Reader就讀的出來了
不知道為什麼會這樣子 X_X

我一開始是想嚐試不要用工具,且用aspx來呈現
查到的方法有兩個,一個是像您這個方式用Repeater
另外是先在程式碼部份做response.clear
然後再用XmlTextWriter自己一行一行寫上去
但不管要用哪個方法…我光是在aspx那裡加上的標籤就會出現錯誤了
錯誤訊息是寫HTML5不支援'rss'元素
我的IDE是VS2017,不曉得是不是版本的問題 orz

我要留言

立即登入留言