正文

一个很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

 

阅读(3081) | 评论(0)


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

评论

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