使用c#mvc4读取rss feed

时间:2013-10-23 10:59:35

标签: c# asp.net-mvc linq asp.net-mvc-4 rss

这是我的第一篇文章。 所以我遇到了这个问题,我对这种语言或c#非常陌生。

我有一个模型读取新闻rss,然后使用相同的索引控制器我必须将它传递给视图。

这是我的模特:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Xml.Linq;

namespace Fantacalcio.Web.Areas.Admin.Models
{
    public class FeedGazzetta
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public string Link { get; set; }
        public string PubDate { get; set; }
        public string Image { get; set; }
    }

    public class ReadFeedGazzetta
    {
        public static List<FeedGazzetta> GetFeed()
        {
            var client = new WebClient();
            client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
            var xmlData = client.DownloadString("http://www.gazzetta.it/rss/Calcio.xml");

            XDocument xml = XDocument.Parse(xmlData);

            var GazzettaUpdates = (from story in xml.Descendants("item")
                             select new FeedGazzetta
                             {
                                 Title = ((string)story.Element("title")),
                                 Link = ((string)story.Element("link")),
                                 Description = ((string)story.Element("description")),
                                 PubDate = ((string)story.Element("pubDate")),
                                 Image = ((string)story.Element("enclosure").Attribute("url"))
                             }).Take(10).ToList();

            return GazzettaUpdates;
        }
    }

}

我的控制器如下:

public ActionResult Index()
        {

            IndexAdminVm model = new IndexAdminVm();

            //List<FeedGazzetta> ListaNotizie = new List<FeedGazzetta>();
            model.ListaNotizie = ReadFeedGazzetta.GetFeed();
            return View(model);
        }

我的ViewModel是这样的:

public class IndexAdminVm
    {
        public List<FeedGazzetta> ListaNotizie { get; set; }
    }

我的观点是:

@model List<Fantacalcio.Web.Areas.Admin.Models.IndexAdminVm>


@{
    ViewBag.Title = "Home";
}

<h2>Home</h2>

@foreach (var item in Model)
{
    @item.ListaNotizie.FirstOrDefault().Title <br />
    @Html.Raw(item.ListaNotizie.FirstOrDefault().Description) <br />
    @item.ListaNotizie.FirstOrDefault().Image <br />
    @Convert.ToDateTime(item.ListaNotizie.FirstOrDefault().PubDate) <br />
    @item.ListaNotizie.FirstOrDefault().Link <br />
    <br /><br />
}

在编译时不会出现任何错误,但是当我在网上查看时,我从视图中得到了这个:

传递到字典中的模型项的类型为'Fantacalcio.Web.Areas.Admin.Models.IndexAdminVm',但字典需要类型为'System.Collections.Generic.List`1的模型项[ Fantacalcio.Web。 Areas.Admin.Models.IndexAdminVm]'。

有什么问题?

我希望我很清楚:) 感谢

1 个答案:

答案 0 :(得分:3)

您将错误的模型传递给View。 您传递单个IndexAdminVm,但需要此视图模型的列表。您应该将视图更改为:

@model Fantacalcio.Web.Areas.Admin.Models.IndexAdminVm

...

@foreach (var item in Model.ListaNotizie)

...