asp.net-core - IList 在回发更新的复选框时返回 count=0
问题描述
我正在使用带有剃须刀页面的 asp.net-core。我正在尝试更新表中的复选框。单击按钮保存时,我使用 asp-route-for 传递,因为我想知道列表中有多少项目但是我的 IList usersAccessRights 返回 count = 0 并在更新函数中跳过我的 foreach。有没有其他方法来接收多少项目并更新表格复选框?
cshtml.cs:
public IActionResult OnPost(int id, string groupAccessName, bool chkDefaultGroup, IList<OutputAccessRights> usersAccessRights, string returnUrl = null){
Update(Convert.ToInt16(groupAccessID),usersAccessRights);
return RedirectToAction("Group AccessDetails", "Form", new { id = GroupAccessID, searchString = SearchString, searchInt = SearchInt }).WithSuccess("Success!", "Updated item!");
}
private void Update(short GroupAccessID, IList<OutputAccessRights> usersAccessRights)
{ Security Security = new Security();
IDataReader dr;
byte MainMenuId = 0;
byte SubMenuId = 0;
string Operation = "";
string OperationId = "";
foreach (var item in usersAccessRights)
{
MainMenuId = Convert.ToByte(item.MainMenuID);
SubMenuId = Convert.ToByte(item.SubMenuID);
//*** Add
OperationId = "A";
if (item.ChkAddRight == true)
Operation = "ADD";
else
Operation = "REMOVE";
Security.GroupAccessRightsMaintain(BellaMain.GlobalVariable.SystemID, Convert.ToInt16(GroupAccessID), MainMenuId, SubMenuId, OperationId, Operation);
//*** Delete
cshtml - 按钮保存:
<div class="col-sm-4">
@if (Model.Details != true)
{
<button type="submit" class="btn btn-primary" asp-page="Group AccessDetails" asp-route-usersAccessRights="@Model.UsersAccessRights">@Localizer["Save"]</button>
}
<a asp-page="Group Access" asp-route-searchString="@Model.SearchString" asp-route-searchInt="@Model.SearchInt">@Localizer["Back to Group"]</a>
</div>
cshtml 表用户访问权限:
@if (Model.UsersAccessRights != null)
{<table class="table table-striped table-bordered dataTable tableAccessRights" id="tableAccessRights" style="width:100%">
<thead>
<tr>
<th>
MainMenu
</th>
<th>
SubMenu
</th>
<th>
Operation
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.UsersAccessRights){ <tr>
<td>
@if (Model.GroupAccessID == 0)
{
<input type="checkbox" class="form-check-inline" name="@item.ChkUserAccessRights" id="chkUserAccessRights" asp-for="@item.ChkUserAccessRights"/>
@Html.DisplayFor(modelItem => item.MainMenuDescription)
}
else
{
@if (Model.Details != true)
{
<input type="checkbox" class="form-check-inline" name="@item.ChkUserAccessRights" id="chkUserAccessRights" asp-for="@item.ChkUserAccessRights"/>
@Html.DisplayFor(modelItem => item.MainMenuDescription)
<span class="text-danger"></span>
}
else
{
<input type="checkbox" class="form-check-inline" name="@item.ChkUserAccessRights" id="chkUserAccessRights" disabled readonly="readonly" />
@Html.DisplayFor(modelItem => item.MainMenuDescription)
}
}
</td>
<td>
@Html.DisplayFor(modelItem => item.SubMenuDescription)
</td>
<td>
@if (Model.GroupAccessID == 0)
{
<input type="checkbox" class="form-check-inline" name="@item.ChkAddRight" id="chkAddRight" asp-for="@item.ChkAddRight"/>
<label for="chkAddRight">Insert</label>
}
else
{
@if (Model.Details != true)
{
<input type="checkbox" class="form-check-inline" name="@item.ChkAddRight" id="chkAddRight" asp-for="@item.ChkAddRight"/>
<label for="chkAddRight">Insert</label>
<span class="text-danger"></span>
}
else
{
<input type="checkbox" class="form-check-inline" name="@item.ChkAddRight" id="chkAddRight" disabled readonly="readonly" asp-for="@item.ChkAddRight"/>
<label for="chkAddRight">Insert</label>
}
}
}
解决方案
这是一个简单的演示,如下所示:
1.型号:
public class OutputAccessRights
{
public int Id { get; set; }
public bool ChkUserAccessRights { get; set; }
public string SubMenuDescription { get; set; }
public string MainMenuDescription { get; set; }
public bool ChkAddRight { get; set; }
}
2.编辑.cshtml:
<form method="post">
<table class="table table-striped table-bordered dataTable tableAccessRights" id="tableAccessRights" style="width:100%">
<thead>
<tr>
<th>
MainMenu
</th>
<th>
SubMenu
</th>
<th>
Operation
</th>
</tr>
</thead>
<tbody>
@for (var i = 0; i < Model.UsersAccessRights.Count(); i++)
{
<tr>
<td>
<input class="form-check-inline"asp-for="UsersAccessRights[i].ChkUserAccessRights" />
@Model.UsersAccessRights[i].MainMenuDescription
</td>
<td>
@Model.UsersAccessRights[i].SubMenuDescription
</td>
<td>
<input class="form-check-inline" asp-for="UsersAccessRights[i].ChkAddRight" />
<label for="chkAddRight">Insert</label>
</td>
</tr>
}
</tbody>
</table>
<button type="submit" class="btn btn-primary" >Save</button>
</form>
3.编辑.cshtml.cs:
public class EditModel : PageModel
{
private readonly RazorContext _context;
public EditModel(RazorContext context)
{
_context = context;
}
[BindProperty]
public IList<OutputAccessRights> UsersAccessRights { get; set; }
public async Task<IActionResult> OnGetAsync()
{
UsersAccessRights = await _context.OutputAccessRights.ToListAsync();
if (UsersAccessRights == null)
{
return NotFound();
}
return Page();
}
public async Task<IActionResult> OnPostAsync(IList<OutputAccessRights> usersAccessRights)
{
//do your stuff...
}
}
推荐阅读
- typo3 - TypoScript:从 pages.media 根页面获取图像 - 或者如何在 TypoScript 中使用 FAL 和 7LTS 中的水平滑动功能?
- go - 如何通过 URL 操作在 golang 中代理 GET 请求
- reactjs - 反应本机重新渲染导致视图滚动到顶部-我的键在渲染之间是否改变?
- dygraphs - 拥有不同的 Dygraph 图例
- spring - 如果我们在 Spring Boot 中以编程方式配置数据源,Spring Boot 数据源属性会起作用吗
- git - 一个 git 远程是否知道另一个?
- wpf - 如何在自动生成的 wpf DataGridCells 中设置绑定选项?
- hadoop - 如何在 Apache PIG 中读取 JSON 列作为字段
- ruby-on-rails - rails 和 rake 命令冻结/挂起
- c# - ReactiveUI - 当 ToProperty 在同一个 Observable 上正常时 ReactiveCommand 失败