当前位置:  开发笔记 > 编程语言 > 正文

在MVC ASP.NET中使用/显示RSS源的简便方法

如何解决《在MVCASP.NET中使用/显示RSS源的简便方法》经验,为你挑选了2个好方法。

我是MVC框架的新手,想知道如何将RSS数据从控制器传递到视图.我知道有必要转换为某种类型的IEnumerable列表.我已经看到了创建匿名类型的一些示例,但无法弄清楚如何将RSS源转换为通用列表并将其传递给视图.

我不希望它被强类型,因为会有多个RSS源的调用.

有什么建议.



1> Matthew..:

我一直在玩一种在MVC中做WebParts的方法,它基本上是包含在webPart容器中的UserControls.我的一个测试用户控件是一个Rss Feed控件.我在Futures dll中使用RenderAction HtmlHelper扩展来显示它,以便调用控制器动作.我使用SyndicationFeed类来完成大部分工作

using (XmlReader reader = XmlReader.Create(feed))
{
    SyndicationFeed rssData = SyndicationFeed.Load(reader);

    return View(rssData);
 }

下面是控制器和UserControl代码:

Controller代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Xml;
using System.ServiceModel.Syndication;
using System.Security;
using System.IO;

namespace MvcWidgets.Controllers
{
    public class RssWidgetController : Controller
    {
        public ActionResult Index(string feed)
        {
            string errorString = "";

            try
            {
                if (String.IsNullOrEmpty(feed))
                {
                    throw new ArgumentNullException("feed");
                }
                    **using (XmlReader reader = XmlReader.Create(feed))
                    {
                        SyndicationFeed rssData = SyndicationFeed.Load(reader);

                        return View(rssData);
                    }**
            }
            catch (ArgumentNullException)
            {
                errorString = "No url for Rss feed specified.";
            }
            catch (SecurityException)
            {
                errorString = "You do not have permission to access the specified Rss feed.";
            }
            catch (FileNotFoundException)
            {
                errorString = "The Rss feed was not found.";
            }
            catch (UriFormatException)
            {
                errorString = "The Rss feed specified was not a valid URI.";
            }
            catch (Exception)
            {
                errorString = "An error occured accessing the RSS feed.";
            }

            var errorResult = new ContentResult();
            errorResult.Content = errorString;
            return errorResult;

        }
    }
}

UserControl

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Index.ascx.cs" Inherits="MvcWidgets.Views.RssWidget.Index" %>
<%= Html.Encode(ViewData.Model.Title.Text) %>   <%= Html.Encode(ViewData.Model.LastUpdatedTime.ToString("MMM dd, yyyy hh:mm:ss") )%>
<% foreach (var item in ViewData.Model.Items) { string url = item.Links[0].Uri.OriginalString; %>

<%= item.Title.Text%> <% if (item.Summary != null) {%>
<%= item.Summary.Text %> <% } } %>

修改后面的代码有一个类型化的模型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ServiceModel.Syndication;

namespace MvcWidgets.Views.RssWidget
{
    public partial class Index : System.Web.Mvc.ViewUserControl
    {
    }
}



2> viperguynaz..:

@Matthew - 完美的解决方案 - 作为代码背后的替代方案,它往往会破坏MVC概念,您可以使用:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>  
<%@ Import Namespace="System.ServiceModel.Syndication" %>

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有