|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Want a new Job?
Chapters
Services
Feature Zones
|
IntroductionSo the other day, I was adding a “news page” to one of my projects, and thought it was a great chance to play with consuming some other RSS feeds that had related information to what I was working on. So, I started looking round, and found the RSS Toolkit that had an RSS Data Source control that is perfect for consuming RSS feeds – the toolkit actually does much more, you should have a read on Dmitry’s blog (he wrote the toolkit and is on the ASP.NET team) and download the toolkit here. I have also used the ASP.NET AJAX Toolkit (which if you are unaware is a collection of controls for use with ASP.NET AJAX, it's an open source project with contributors from both MS and the community). The control I use is the Collapsible Panel control, so you can see a list of the blogs and click each to reveal the text. BackgroundYou will need to have the ASP.NET AJAX RC1 extensions installed, which you can get from here. Using the codeSimple page layout using CSS, the right panel contains a
Changing the selection of blog to view files, the
ASPX markup <div id="content-side1">
<ul class="list-of-links">
<li id="list1" class="current">
<asp:LinkButton ID="LinkButton1" runat="server"
CommandArgument="1" OnCommand="lnkOptions_Command"
OnClientClick="linklist_onclick(1);">ASP.NET Latest
</asp:LinkButton></li>
<li id="list2">
<asp:LinkButton ID="LinkButton2" runat="server"
CommandArgument="2" OnClientClick="linklist_onclick(2);"
OnCommand="lnkOptions_Command">C# Latest
</asp:LinkButton></li>
<li id="list3">
<asp:LinkButton ID="LinkButton3" runat="server"
CommandArgument="3" OnClientClick="linklist_onclick(3);"
OnCommand="lnkOptions_Command">Vista Latest
</asp:LinkButton></li>
<li id="list4">
<asp:LinkButton ID="LinkButton4" runat="server"
CommandArgument="4" OnClientClick="linklist_onclick(4);"
OnCommand="lnkOptions_Command">ASP.net AJAX Latest
</asp:LinkButton></li>
<li id="list5">
<asp:LinkButton ID="LinkButton5" runat="server"
CommandArgument="5" OnClientClick="linklist_onclick(5);"
OnCommand="lnkOptions_Command">Dmitryr's Latest
</asp:LinkButton></li>
</ul>
</div>
Blog Role Panel... <asp:panel id="BlogPanel1" runat="server">
<rss:rssdatasource id="RssDataSource1" runat="server"
maxitems="0" Url="http://www.asp.net/News/rss.ashx">
</rss:rssdatasource>
<asp:DataList ID="BlogList1" runat="server" DataSourceID="RssDataSource1">
<ItemTemplate>
<asp:Panel ID="panelHeader" runat="server"
Style="cursor: pointer; color: #d61719;
width: 100%; display: block;">
<span style="float: left;">
<%# Eval("title") %>
</span>
<asp:Image ID="Image1" runat="server"
Style="float: right;" ImageUrl="~/images/expand_blue.jpg" />
</asp:Panel>
<asp:Panel ID="Panel1" runat="server"
Style="margin-top: 3px; background: transparent url
(images/blogBack.gif) no-repeat text-top left;">
<%# Eval("description") %>
(<asp:HyperLink ID="hlMore" runat="server"
NavigateUrl='<%# Eval("link") %>' Target="_blank"
Text="read more"></asp:HyperLink>)
</asp:Panel>
<ajaxt:collapsiblepanelextender id="cpe1"
runat="server" targetcontrolid="Panel1"
expandcontrolid="panelHeader"
collapsecontrolid="panelHeader" suppresspostback="true"
imagecontrolid="Image1" collapsed="true"
expandedimage="~/images/collapse_blue.jpg"
collapsedimage="~/images/expand_blue.jpg" />
<hr style="border-bottom: 1px dotted #B2B2B2; margin: 0px;" />
</ItemTemplate>
</asp:DataList>
</asp:panel>
C# code-behind As you can see, each protected void lnkOptions_Command(object sender, CommandEventArgs e) {
int command = Convert.ToInt32(e.CommandArgument);
switch (command) {
case 1:
RssDataSource1.Url = "http://www.asp.net/News/rss.ashx";
BlogList1.DataBind();
lblHeader.Text = "ASP.NET News";
break;
case 2:
RssDataSource1.Url =
"http://msdn.microsoft.com/vcsharp/rss.xml";
BlogList1.DataBind();
lblHeader.Text = "C# News";
break;
case 3:
RssDataSource1.Url =
"http://windowsvistablog.com/blogs/MainFeed.aspx";
BlogList1.DataBind();
lblHeader.Text = "Windows Vista News";
break;
case 4:
RssDataSource1.Url =
"http://weblogs.asp.net/atlas-team/rss.aspx";
BlogList1.DataBind();
lblHeader.Text = "ASP.net AJAX News";
break;
case 5:
RssDataSource1.Url =
"http://blogs.msdn.com/dmitryr/rss.xml";
BlogList1.DataBind();
lblHeader.Text = "Dmitryr's blog";
break;
default:
break;
}
}
....finally on the page, I have added a little bit of JavaScript to change the CSS class of the blog list item to indicate which one is active. If <script language="javascript" type="text/javascript">
var ele;
function linklist_onclick(itemNumber) {
if(ele == null) ele = $get("List1");
ele.className = "";
ele = ele = $get("list" + itemNumber);
ele.className = "current";
return true;
}
</script>
Points of interestYou should take a look at the AjaxControlToolkit on codeplex. Dmitry - author of the RSS Toolkit is looking for co-oridinators to help him when he puts the toolkit on CodePlex; take a look if you are interested; if not, he has a great blog and is well worth a read. This is my first article on CodeProject, but subscribe to my blog where I am often posting little things like this!!
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||