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

时间:2019-03-11 19:37:00

标签: asp.net asp.net-mvc model-view-controller xml-parsing

对于该任务,我必须从多个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

1 个答案:

答案 0 :(得分: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可以创建重复项,请参见此答案以获取解决方案 TargetDir