我会尽力描述我的问题,很难说出来。
在我的页面上,我有一个文本框和一个按钮。我在文本框中键入用户名,然后单击按钮以返回所有用户信息。
在此之下,我有一个表,由我的数据库中每个角色的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?
答案 0 :(得分:1)
最简单的方法是分配一个可以更容易通过jquery选择的想法。因为你正在使用剃须刀。看起来像这样。
foreach (var role in Model.appRoles)
{
<input type="checkbox" id="chk_@(role.Name)" />
}
然后,当您尝试获取复选框时,您将使用这样的选择器。
$('#chk_' + roleName).prop('checked',true);
如果你需要使用严格的jQuery获取复选框。你可以这样做......
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属性),而不会触及任何内容。