对于任务,我必须从几个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);
}
}
为什么要四个请求?您可以从单个请求中获取项目并随机显示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