IList возвращает счетчик = 0 при отправке обратно обновленных флажков - PullRequest
0 голосов
/ 01 февраля 2020

Я использую asp. net -кор с бритвенными страницами. Я пытаюсь обновить флажки в таблице. При нажатии на кнопку «Сохранить» я передаю asp -route-for, потому что хочу узнать, сколько элементов в списке. Но мой IList usersAccessRights возвращает count = 0 и пропускает мой foreach в функции обновления. Есть ли другой способ получить количество предметов и обновить флажки таблицы?

cs html .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

cs html - кнопка сохранения:

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

cs html -таблицы UsersAccessRights:

@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 Ответ

0 голосов
/ 04 февраля 2020

Вот простая демонстрация, как показано ниже:

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.cs html:

<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.cs html .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.Результат: enter image description here

...