Использование HTML-радиокнопок в ASP.NET MVC - PullRequest
0 голосов
/ 18 июня 2009

Я пытался следовать этому , но связыватель моделей по умолчанию позволял моему массиву обнуляться на стороне сервера.

HTML:

Question 1:
<input name="list[0]" type="radio" value="1000" />No
<input name="list[0]" type="radio" value="1001" />Yes
Question 2:
<input name="list[1]" type="radio" value="1002" />No
...

Действие контроллера:

 public ActionResult Anamnesis(string[] list)
 {

Если я выберу только второе «Нет» (список [0] отсутствует), тогда DefaultModelBinder будет невозможно преобразовать его в массив.

Спасибо заранее!

Обновление # 1

Переформатировано на основе комментария, спасибо!

Update # 2

Просто мысль: создал скрытый ввод после всего элемента списка, и таким образом он работает. Но это безобразно, без сомнения.

Question 1:
<input name="list[0]" type="radio" value="1000" />No
<input name="list[0]" type="radio" value="1001" />Yes   
<input type="hidden" name="list[0]"/>
Question 2:
<input name="list[1]" type="radio" value="1002" />No
<input type="hidden" name="list[1]"/>
...

Порядок это очень важно: скрытое значение отправляется только тогда, когда радио не проверено. Идея от помощников ASP.NET MVC. (Кстати, я не могу использовать Html.RadioButton для архивирования этого поведения.)

Ответы [ 2 ]

0 голосов
/ 26 июня 2009

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

Возможно, существует другой аналогичный способ сделать то, что вы просите, который основан на этой статье и который также использует скрытые входные данные. Идея состоит в том, что вы можете создавать индексы для каждого из ваших радиоприемников, чтобы избежать ситуации, когда пропущенный выбор ранее в форме вызывает отбрасывание всех последующих выборов:

Question 1:
<input name="list.Index" type="hidden" value="0" />
<input name="list[0]" type="radio" value="1000" />No
<input name="list[0]" type="radio" value="1001" />Yes
Question 2:
<input name="list.Index" type="hidden" value="1" />
<input name="list[1]" type="radio" value="1000" />No
<input name="list[1]" type="radio" value="1001" />Yes

Причина, по которой я предлагаю это, в том случае, если вы хотите связать свои ответы с конкретным вопросом по уникальному идентификатору, а не просто с помощью 0, 1, 2 и т. Д. В статье, на которую я ссылаюсь, будет показан пример как это сделать.

Удачи!
-Mike

0 голосов
/ 18 июня 2009

Атрибут имени переключателя должен быть списком, а не списком [n].

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