Проблема с получением правильной модели контроллера - PullRequest
1 голос
/ 11 марта 2019

Для выполнения задачи мне нужно загрузить несколько элементов из нескольких 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 Ответ

1 голос
/ 11 марта 2019

Почему четыре запроса?Вы можете взять элементы из одного запроса и отобразить случайное число 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 из списка, поскольку случайные числа могут создавать дубликаты, см. Этот ответ для решений Генератор случайных чисел без дубликатов

...