Asp.net core IList在回发更新的复选框时返回计数=0

Asp.net core IList在回发更新的复选框时返回计数=0,asp.net-core,razor-pages,Asp.net Core,Razor Pages,我正在使用asp.net-core和razor页面。我正在尝试更新表中的复选框。 单击“保存”按钮时,我将通过asp路由传递,因为我想知道列表中有多少项,但我的IList usersAccessRights返回count=0并跳过更新函数中的我的foreach。是否有其他方法接收多少项并更新表复选框 cshtml.cs: public class EditModel : PageModel { private readonly RazorContext _context; pu

我正在使用asp.net-core和razor页面。我正在尝试更新表中的复选框。 单击“保存”按钮时,我将通过asp路由传递,因为我想知道列表中有多少项,但我的IList usersAccessRights返回count=0并跳过更新函数中的我的foreach。是否有其他方法接收多少项并更新表复选框

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...
    }
}
cshtml-按钮保存:

cshtml表格用户访问权限:


}以下是一个简单的演示:

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.Edit.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.Edit.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.结果:

您能分享您的模型吗?如果我的答案有帮助,您能接受作为答案吗?请参阅:我的模型与您的模型相同,在类OutputAccessRights:[BindProperty]public IList UsersAccessRights{get;set;}之后添加此选项我的整个应用程序都是使用PageModel的,有没有其他方法可以在不将PageModel更改为DbContext的情况下执行此操作?我不清楚您的问题。我使用PageModel,只是使用DbContext在OnGet方法上显示数据。。。
<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>
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...
    }
}