如何标记没有ID的循环生成的复选框?

时间:2015-11-25 19:58:17

标签: javascript jquery asp.net checkbox

我会尽力描述我的问题,很难说出来。

在我的页面上,我有一个文本框和一个按钮。我在文本框中键入用户名,然后单击按钮以返回所有用户信息。

在此之下,我有一个表,由我的数据库中每个角色的foreach循环生成,用户可能在其中,旁边有2个复选框。即使在单击按钮之前,角色和文本框也会显示。

当用户信息返回时,无论用户处于哪个角色,我都需要检查这些框。

这似乎很容易,我只是很难弄清楚我将如何定位每个特定的复选框,因为它们是在循环中创建的,不允许我给它们特定的ID。

<table border="1" id="ApplicationRoles">
            <thead>
                <tr>
                    <th style="text-align:center" width="300">Role</th>
                    <th style="text-align:center" width="300">Category 1</th>
                    <th style="text-align:center" width="300">Category 2</th>
                </tr>
            </thead>
            <tbody>

                @foreach (var role in Model.appRoles)
                {
                   <tr>
                        <td>
                            @Html.DisplayFor(modelItem => role.Name)
                        </td>
                        <td>

                            <input type="checkbox"  />

                        </td>
                        <td>
                            <input type="checkbox" />

                    </tr>
                }
            </tbody>
        </table>

使用javascript,我可以查看用户所处的角色,但是如何定位特定的复选框以进行检查(说明用户是否担任此角色),而无法为每个人提供ID?

4 个答案:

答案 0 :(得分:1)

最简单的方法是分配一个可以更容易通过jquery选择的想法。因为你正在使用剃须刀。看起来像这样。

foreach (var role in Model.appRoles)
{
    <input type="checkbox" id="chk_@(role.Name)" />
}

然后,当您尝试获取复选框时,您将使用这样的选择器。

$('#chk_' + roleName).prop('checked',true);

如果你需要使用严格的jQuery获取复选框。你可以这样做......

http://jsfiddle.net/8q9cco37/

var user = {'role':'ADMIN2'};

var $roleMatch = $('td').filter(function(){
   return $(this).text().toLowerCase() == user.role.toLowerCase();
});

var chk1 = $roleMatch.next('td').find('input');
var chk2 = $roleMatch.next('td').next('td').find('input');

chk1.prop('checked',true);
chk2.prop('checked',true);

答案 1 :(得分:0)

我不熟悉asp.net,所以我可能搞砸了语法,但想法是一样的。

这里我使用role.Name作为复选框的ID,您可以使用任何方便在JS代码中引用的内容。

  

                                                        角色                       第1类                       第2类                                                 

            @foreach (var role in Model.appRoles)
            {
               <tr>
                    <td>
                        @Html.DisplayFor(modelItem => role.Name)
                    </td>
                    <td>

                        <input type="checkbox" id="<%= role.Name %>1" />

                    </td>
                    <td>
                        <input type="checkbox" id="<%= role.Name %>2"/>

                </tr>
            }
        </tbody>
    </table>

答案 2 :(得分:0)

我会创建一个变量并将其作为id的一部分附加,以区分它们。我假设这两个输入是每个列表的一组?所以,我会在编号约定中区分它们(比如&#39; y&#39; n&#39;如果你得到我所说的话):

@{
var i = 0;
foreach (var role in Model.appRoles)
{
  i += 1;
  <tr>
    <td>
        @Html.DisplayFor(modelItem => role.Name)
    </td>
    <td>

        <input type="checkbox" ID="checkbox_Y@i"  />

    </td>
    <td>
        <input type="checkbox" ID="checkbox_N@i" />
    </td>
  </tr>
}

答案 3 :(得分:0)

如果您要进行实际绑定,可以这样做。

@for(int i = 0; i < Model.appRoles.Count; i++)
{
      <tr>
          <td>
              @Html.DisplayFor(modelItem => Model.appRoles[i].Name)
          </td>
          <td>
              @Html.CheckBoxFor(x=> Model.appRoles[i].IsEnabled, new { id = Model.appRoles[i].MyId })
          </td>
      </tr>
}

然后,如果您感兴趣的话,那就是分配特定ID。

但是,如果将其包装到一个动作中,它将生成适当的名称,可以在提交表单时绑定回模型(具有List属性),而不会触及任何内容。