Сохранение значения случайного числа после обновления сайта - PullRequest
0 голосов
/ 04 мая 2020

Эй, я создал базу данных с вопросом. каждый вопрос имеет уникальный идентификатор (.ID), а генератор случайных чисел случайным образом выбирает числа, и вопрос с этим номером (id) выбирается и появляется на веб-сайте.

Пока все хорошо, но я хочу каждый вопрос появляться один раз. К сожалению, каждый пользовательский запрос уникален, поэтому значения не запоминаются.

Существует ли простой способ реализовать это в моем коде, чтобы при отправке формы мой веб-сайт все еще распознавал предыдущий.

var questions = from m in _context.Question
                                select m;

var rowsTaken = new HashSet<int>();
Random r = new Random();

int rndRowIndex = r.Next(1, 10);


if (!string.IsNullOrEmpty(QuestionLayer))
{
    do
    {
        questions = questions.Where(x => x.ID == rndRowIndex);
        //questions = questions.Where(x => x.Layer == QuestionLayer);
    } while (listids.Contains(rndRowIndex));
    listids.Add(rndRowIndex);
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Хранение в базе данных - хороший выбор. Если вы не хотите изменять базу данных, вы можете использовать session для хранения случайно сгенерированного значения каждый раз.

Подробнее, обратитесь к следующему коду:

Во-первых, включите сеанс в вашем файле starup.cs:

  • В Configuration метод add services.AddSession();

  • В Configure метод add app.UseSession();

Тогда у вас в контроллере:

            //retrieve the session 
            var str = HttpContext.Session.GetString("mykey");
            List<int> listids = str == null ? new List<int>() : JsonConvert.DeserializeObject<List<int>>(str);


            var questions = from m in _context.Question
                            select m;
            //If all the questions have occurred, to prevent entering into an endless loop, we need to store the previously stored empty.
            if (listids.Count == questions.Count())
            {
                listids = new List<int>();
            } 
            if (!string.IsNullOrEmpty(QuestionLayer)
            {
                var rowsTaken = new HashSet<int>();
                Random r = new Random();
                int rndRowIndex = r.Next(1, 10);
                while (listids.Contains(rndRowIndex))
                {
                    rndRowIndex = r.Next(1, 10);
                }
                questions = questions.Where(x => x.ID == rndRowIndex);
                listids.Add(rndRowIndex);
               //store new list to session
                HttpContext.Session.SetString("mykey", JsonConvert.SerializeObject(listids));
            }
0 голосов
/ 04 мая 2020

Быстрый ответ о генераторе случайных чисел - нет. Однако вы можете отслеживать ответы на вопросы или отображать их, отмечая их в базе данных. Затем, когда генерируется случайное число, проверьте вопрос, связанный с этим числом. Если ответ / отображен уже, либо сгенерируйте другой номер для следующего вопроса, либо с помощью первого сгенерированного номера посмотрите на следующий вопрос и следующий до и так далее, пока не найдете следующий вопрос без ответа. Когда вопрос выбран для отображения, пометьте его в базе данных как отображаемый.

После того, как все вопросы отвечают, пометьте все вопросы как неотвеченные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...