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