摘要:作者在设计这个Rss阅读器,主要涉及到三个技术亮点: ASP.NET AJAX的组件UpdatePanel和UpdateProgress , ASP.NET AJAX ControlToolkit的组件collapsiblepanelextender,还有Rss Toolkit的Rss Data Source。 背景知识:你必须安装ASP.NET AJAX RC1 extensions ,ASP.NET AJAXControlkit以及Rss Toolkit。 实现过程: 使用Css来布局一下页面,在右边的面板(panel)包含一个用来绑定RssDataSource的DataList控件来显示Blog的每一项,DataList控件被包含在asp:UpdatePanel。Datalist的item模板含有一个来自AjaxControlToolkit的collapsiblepanelextender组件来显示Blog每一项的描述。 改变blog的选择来查看文件,asp:UpdateProgress面板被设置来显示,Blog每项被加载和显示。你能够在Blog列表看到,我简单地隐藏了<li>元素的背景来显示被激活的内容。 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;"> <%# Eval("title") %> <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 正如你所见到,每一个LinkButton跟随着一个OnCommand处理事件,以及参数确定那个Blog获取数据源的绑定。 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; }} 在页面的最后,我还添加了一些javascript来操纵css的类,而css的类用于Blog列表每一项指定那个被激活。如果变量ele(<li>元素)为null,我假设这是第一次调用(call),因此这个元素可能是list1。 <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> 本人翻译的文章,若有不好,恳请大家指点,谢谢!参考代码:http://www.codeproject.com/Ajax/AspNetAJAXRssReader/RssReader_src.zip

评论