радиокнопки mvc в foreach - PullRequest
       2

радиокнопки mvc в foreach

7 голосов
/ 06 октября 2011

Я использую MVC, и у меня есть несколько RadioButtons в foreach:

    foreach (var item in group) {
                    <tr>
                        <td>
                            @Html.RadioButtonFor(modelItem => item.CheckerApproved, true)
                            @Html.RadioButtonFor(modelItem => item.CheckerApproved, false)
                        </td>
                    </tr>
}

Так что для каждого элемента в группе должна быть кнопка радио для истинных и ложных.

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

<tr>
   <td>
      <input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved">
      <input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved 
         checked="checked">
   </td>
</tr>

<tr>
   <td>
      <input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved">
      <input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved 
         checked="checked">
   </td>
</tr>

Я хотел, чтобы группы radiobuttons были разделены.Таким образом, изменение значения в первой строке не повлияет на значение во второй строке.Однако, если вы установили слово true в верхней строке, выберите любое значение во второй строке, и значение true в первой строке будет отменено.

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

Кто-нибудь знает, как я могу заставить его работать, чтобы значения true и false для каждой строки взаимодействовали друг с другом, но не влияют на radiobuttons в другихстроки?

Ответы [ 3 ]

15 голосов
/ 06 октября 2011

Не пишите циклы в представлениях.Они безобразны, и в результате вы получаете нежелательное поведение, описанное в вашем вопросе.Используйте шаблоны редакторов, например:

<table>
    <thead>
        <tr>
            <th>Approved status</th>
        </tr>
    </thead>
    <tbody>
         @Html.EditorFor(x => x.Groups)
    </tbody>
</table>

Здесь я предполагаю, что ваша модель представления имеет свойство коллекции Groups типа IEnumerable<GroupViewModel>.Теперь осталось только написать соответствующий шаблон редактора, который будет выполняться для каждого элемента в коллекции Groups (~/Views/Shared/EditorTemplates/GroupViewModel.cshtml):

@model GroupViewModel
<tr>
    <td>
        @Html.RadioButtonFor(x => x.CheckerApproved, "true") <span>Approved</span>
        @Html.RadioButtonFor(x => x.CheckerApproved, "false") <span>Not approved</span>
    </td>
</tr>

Теперь не только то, что вам больше не нужно писать некрасивый foreachциклы в вашем представлении, но в итоге вы получите правильное соглашение об именах.

2 голосов
/ 06 октября 2011

Одним из способов является использование для цикла и RadioButton вместо RadioButton для

@for (int i = 0; i < item.Count; i++)
{
    <tr>
        <td>
            @Html.RadioButton("item_CheckerApproved_" + i, true, item[i].CheckerApproved)
            @Html.RadioButton("item_CheckerApproved_" + i, false, !item[i].CheckerApproved)
        </td>
    </tr>
}
0 голосов
/ 20 октября 2015

Один способ использования радиокнопок в foreach

 @{
    int i = 0;
    foreach(var item in group)
      { 
         i++;
       <tr>
       <td>
          <input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved_@i">
          <input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved_@i 
             checked="checked">
       </td>
    </tr>

    <tr>
       <td>
          <input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved_@i">
          <input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved_@i 
             checked="checked">
       </td>
    </tr>
      }

    }

Надеюсь, это поможет;)

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