获得正确的控制器模型的问题

问题描述 投票:1回答:1

对于任务,我必须从几个xml文档(RssReader)下载几个项目,然后在页面上显示随机的4个元素。我已经完成了所有代码,唯一的问题是页面显示相同的4个项目,如果我在视图/控制器中的调试器中设置陷阱,则所有内容都正确加载。我不知道问题可能是什么,这是我在ASP.NET中开始使用代码的所有线索,非常感谢!

查看代码:

<table class="table">

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @item.Title
            </td>
            <td>
                @item.PubDate
            </td>
        </tr>
    }

</table>

型号代码:

public class RssItem
{
    public string Title { get; set; }
    public string PubDate { get; set; }
}

控制器代码:

public class PortfolioController : Controller
{
    // GET: Portfolio
    public ActionResult Index()
    {
        var linkList = new List<string> {
                "https://news.google.com/rss?hl=pl&gl=PL&ceid=PL:pl",
                "https://news.google.com/rss?hl=pl&gl=PL&ceid=PL:pl",
                "https://news.google.com/rss?hl=pl&gl=PL&ceid=PL:pl",
                "https://news.google.com/rss?hl=pl&gl=PL&ceid=PL:pl"
            };

        List<RssItem> rssItems = new List<RssItem>();
        List<RssItem> randomRSS = new List<RssItem>();

        foreach (string linkRss in linkList)
        {
            XElement xml = XElement.Load(linkRss);
            var query = xml.Descendants("item").Select(item =>
                         new RssItem
                         {
                             Title = item.Element("title").Value,
                             PubDate = item.Element("pubDate").Value,
                         }).ToList();

            foreach (var item in query)
            {
                rssItems.Add(item);
            }
        }
        for (int i = 0; i < 4; i++)
        {
            Random random = new Random();
            int randomInt = random.Next(rssItems.Count);
            randomRSS.Add(rssItems[randomInt]);
        }

        return View(randomRSS);
    }
}

调试器中没有陷阱:Without traps in debugger

在视图和控制器(调试器模式)中使用陷阱:enter image description here

asp.net asp.net-mvc model-view-controller xml-parsing
1个回答
1
投票

为什么要四个请求?您可以从单个请求中获取项目并随机显示4.但是为了使Random工作,它需要在for循环之外。

Random random = new Random();

for (int i = 0; i < 4; i++)
{ 
    int randomInt = random.Next(rssItems.Count);
    randomRSS.Add(rssItems[randomInt]);
}

但是如果你不从列表中删除rss,你仍然可以得到重复项,因为随机可以创建重复项,请参阅此答案解决方案Random number generator with no duplicates

© www.soinside.com 2019 - 2024. All rights reserved.