Как заполнить и отправить три формы (на основе одной и той же модели) на одной странице из представления в контроллер? - PullRequest
0 голосов
/ 25 сентября 2019

Я программирую веб-приложение (на mvc), в котором «quizmaster» может добавлять вопросы.Викторина содержит 3 вопроса.

Мне бы хотелось, чтобы мастер викторины мог добавить оба вопроса на одну страницу / форму.

Проблема в том, что я знаю, как отправить только один вопрос.а не три из них.

Поэтому я создал представление (AddQuestions), две модели (Question и Quiz) и контроллер (QuizController).

Представление строго типизировано с моделью Question,На это мнение у меня есть форма.На данный момент у меня есть цикл for, который повторяется до трех, так что можно заполнить 3 вопроса. Все они находятся в одной форме.

Модель

public class Question
    {
        public int Id { get; set; }
        public string Question { get; set; }
        public double Points { get; set; }
    }

Класс Quiz содержитИдентификатор, дата и поля для сохранения идентификаторов трех вопросов

Просмотр

<form asp-action="AddQuestions" method="post">
            @{
                for (var i = 0; i < 3; i++)
                {
                    if (i == 0)
                    {
                        <span>Question 1</span>
                    }
                    else if (i == 1)
                    {
                        <span>Question 2</span>
                    }
                    else if (i == 2)
                    {
                        <span>Question 3</span>
                    }

                    <p>
                        <label asp-for="Question[i]">Question</label>
                        <input asp-for="Question[i]" />
                    </p>
                    <p>
                        <label asp-for="Answer[i]">Answer</label>
                        <input asp-for="Answer[i]" />
                    </p>
                    <p>
                        <label asp-for="Points[i]">Points</label>
                        <input asp-for="Points[i]" />
                    </p>
                }
            }
            <button type="submit">Add</button>
        </form>

Контроллер

[HttpPost]
        public ViewResult AddQuestions(IEnumerable<Question> questionList)
        {
            return View();
        }

Я ожидаю, что вывод questionList представляет собой список вопросов(поэтому я могу добавить эти вопросы в Викторину), но нет вывода, потому что в представлении произошли две (одинаковые) ошибки.

Ошибка:

«Невозможно применить индексирование с помощью [] к выражению типа 'double'" Эта ошибка относится к частям asp-for = "Points [i]".

Как добиться того, чтобы мастер викторины могзаполнить три вопроса (из типового вопроса) (для одного теста) на одной странице?

1 Ответ

0 голосов
/ 25 сентября 2019

Ваша модель на странице просмотра выглядит следующим образом: @model List<Models.Question> отсюда берется количество моделей, как показано ниже

for(int i=0;i<model.count;i++)
{
//Your form tags
}

, а на стороне контроллера используется цикл foreach для получения данных формы,см. это: нажмите здесь

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