Как мне создать x количество текстовых полей в моем представлении для ввода данных в список или словарь, который является частью модели? - PullRequest
0 голосов
/ 03 ноября 2011

Извините за неловкий вопрос, я не знал, как его сформулировать.У меня есть модель вопроса, в которой у меня есть несколько строк и один словарь (который я буду использовать для хранения ответов и количества голосов, которые получает каждый ответ. Я - парень из PHP и очень плохо знаком с ASP, поэтому я 'Я не совсем уверен, правильно ли я это делаю - поэтому не стесняйтесь конструктивно критиковать то, как я это делаю:)

Когда кто-то создает вопрос, у него может быть определенное количество ответов, которые он хочет, чтобы другиевыбрал из - скажем, 5, например.Поэтому я хочу, чтобы представление createQuestion отображало 5 текстовых полей для ответов, которые необходимо ввести, и каждое из этих текстовых полей должно относиться к первым 5 ключевым элементам в словаре.Затем я могу установить значения каждого в 0 при сохранении вопроса.Они будут сохранены в виде файла XML, и на самом деле будет сохранено только количество ответов (поэтому, если я укажу 5, а они будут использовать только 3, тогда только 3 будут отображаться в сохраненном формате XML).

Итак, в модели у меня есть что-то вроде этого (упрощенно):

public class QuestionModel {

        public int sampleId { get; set; }

        [Required]
        [DisplayName("Question")]
        public string Question { get; set; }

        public Dictionary<string, int> Answers { get; set; }

Я также инициализирую Dict в конструкторе:

   public QuestionModel() {
        this.Answers = new Dictionary<string, int>();
    }

И вот тут я отклеиваюсь,Я просто понятия не имею, как выполнить итерацию несколько раз, создав текстовые поля в представлении для добавления информации в Dict ... Я использую следующее для добавления вопроса:

Question:<%= Html.TextBoxFor(x => x.Question) %> 

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

<% for (var i = 0; i < 5; i++) { %>
    Answer <%= i%><%= Html.TextBoxFor(x => x.Answers[i])%>
<% } %>

Я бы очень признателен за некоторые указания или толчки в правильном направлении.Мне пришлось прибегнуть к 5 отдельным строкам (Answer1, Answer2 и т. Д.) На данный момент и 5 соответствующим целым числам ... но это кажется отвратительным ... должен быть способ ...

Приветствия

1 Ответ

1 голос
/ 03 ноября 2011

Вместо Dictionary<string,int> создайте новый класс (давайте назовем его Answer) со свойствами, представляющими как строку, так и int. Ваш класс Question должен иметь List<Answer>, который вы можете легко зациклить и отобразить в своем представлении.

Вы, вероятно, также захотите добавить свойство int ID к Ответить и сделать так, чтобы ваши кнопки "голосования" включали его в свой маршрут, чтобы вы могли выяснить на стороне сервера, какой ответ был выбран.

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