正文

一个很cool的ASP.NET AJAX RSS Reader2007-06-03 02:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goalbell/26364.html

分享到:

摘要:作者在设计这个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  

阅读(3126) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册