2013-04-25 2 views
1

Я создаю приложение, которое позволяет пользователям проходить ряд вопросов и выбирать их ответ из 4 заранее определенных параметров. Проблема, с которой я столкнулся, заключается в том, как отправить данные обратно контроллеру. У меня есть объект Game, который имеет свойство Questions, в то время как каждый вопрос содержит Code, Question и Answer, все string тип.Как отправить данные из нескольких автоматически генерируемых полей из представления в контроллер

Я создал страницу, которая отображает каждый вопрос и ответ в выпадающем списке (как только я выясню, как разместить его как радиокнопки, я буду использовать это), но я в тупике о том, как я должен отправить результаты возвращаются к контроллеру: каждый элемент select в сгенерированном коде HTML имеет то же самое id, так как я могу отличить отношение вопрос-ответ от любого другого?

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

код, я использую, чтобы создать свой текущий вид заключается в следующем:

@using (Html.BeginForm("Save", "Game", FormMethod.Post)) { 
     foreach (var question in Model.Questions) { 
      <div class="question"> 
       <h4>@vraag.Vraag</h4> 
       @Html.DropDownListFor(x => question.Code, new SelectList(question .Answers)) 
       @Html.HiddenFor(x => question.Code)    
      </div> 
     } 
     <input type="submit" value="Save" /> 
    } 

Я хочу послать все ответы обратно в мой контроллер таким образом, чтобы четко говорит мне, какой ответ предназначен для кода, какой вопрос в ,

ответ

1

Вы не можете использовать список foreach для привязки списков, потому что их поля имени не будут проиндексированы (поэтому связующее устройство не знает, что с ними делать). Вам нужно использовать цикл for. Попробуйте следующее:

for (int i = 0; i < Model.Questions.Count; i++) { 
     <div class="question"> 
      <h4>@vraag.Vraag</h4> 
      @Html.DropDownListFor(x => x.Questions[i].Code, new SelectList(Model.Questions[i].Answers)) 
      @Html.HiddenFor(x => x.Questions[i].Code)    
     </div> 
    } 
+0

Это имеет большой смысл, я попробую его и посмотрю, куда он меня приносит. –

+0

Это сделало именно то, что я хотел, спасибо! Я заметил дополнительную ошибку: значение моего скрытого поля всегда остается неизменным (для двух текущих вопросов оно имеет значения 1 и 3). Почему это значение не изменяется, когда я выбираю другой ответ? –

+1

Нет проблем! Рад, что смог помочь. Прежде чем использовать модель, вам нужно будет вызвать 'ModelState.Clear' в вашем методе HttpPost'. По умолчанию MVC будет использовать значения модели, которые вы передали в виде представления (находится в 'ModelState'). – mattytommo

Смежные вопросы