我尝试在blazor中创建用户管理。当我点击复选框时,它是选中/取消选中的。但当它显示索引超出界限时。我不知道哪里出了问题。用blazor wash试试。请帮忙检查一下。它只是一个基本的组件,但不知怎的,我还不习惯它的用法。
我尝试在blazor中创建用户管理。当我点击复选框时,它是选中/取消选中的。但当它显示索引超出界限时。我不知道哪里出了问题。用blazor wash试试。请帮忙检查一下。它只是一个基本的组件,但不知怎么的,我还不习惯它的用法。
@page "/manageuserrole/{userId}"
@inject HttpClient client
@inject IJSRuntime js
@inject NavigationManager uriHelper
<h3>User Roles</h3>
@if (manageUserRolesDto == null)
{
<text>Loading...</text>
}
@*else if (manageUserRolesDto.Length == 0)
{
<text>No Records Found.</text>
}*@
else
{
<EditForm Model="@manageUserRolesDto" OnValidSubmit="@UpdateUserRoles">
<table class="table table-striped">
<thead>
<tr>
<th>Role</th>
<th>Status</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < manageUserRolesDto.UserRoles.Count(); i++)
{
<tr>
<td>@manageUserRolesDto.UserRoles[i].RoleName</td>
<td>
<div class="form-check m-1">
<input type="checkbox"
@bind="@manageUserRolesDto.UserRoles[i].Selected"
/>
</div>
</td>
</tr>
}
</tbody>
</table>
<button type="submit" class="btn btn-success">
Submit
</button>
</EditForm>
}
@code {
[Parameter]
public string userId { get; set; }
ManageUserRolesDto manageUserRolesDto { get; set; }
protected override async Task OnInitializedAsync()
{
manageUserRolesDto = await client.GetFromJsonAsync<ManageUserRolesDto>("api/userroles/" + userId);
}
private void checkUserRole(int i)
{
manageUserRolesDto.UserRoles[i].Selected = !manageUserRolesDto.UserRoles[i].Selected;
}
async Task UpdateUserRoles()
{
await client.PutAsJsonAsync("api/userroles/" + userId, manageUserRolesDto);
uriHelper.NavigateTo("user");
}
async Task ManagePermission(string roleId)
{
}
}
@for (int i = 0; i < manageUserRolesDto.UserRoles.Count(); i++)
{
int copy = i;
<tr>
<td>@manageUserRolesDto.UserRoles[i].RoleName</td> <-- this 'i' is OK
<td><div class="form-check m-1">
<input type="checkbox"
@bind="@manageUserRolesDto.UserRoles[copy].Selected" <-- i is not OK
/>
</div></td>
</tr>
}
@bind
被编译成捕获变量的lambda函数。
另一个选择是使用foreach() { }
而不是for() { }