首页 > 解决方案 > 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>
                        }
                    }

}

标签: asp.net-corerazor-pages

解决方案


这是一个简单的演示,如下所示:

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...
    }
}

4.结果: 在此处输入图像描述


推荐阅读