Как исправить «Элемент модели, переданный в словарь, имеет тип, но для этого словаря требуется элемент модели типа» - PullRequest
1 голос
/ 26 апреля 2019

Я хочу сделать пейджинг в таблице с помощью Pagedlist и получить ошибку

Элемент модели, передаваемый в словарь, имеет тип 'PagedList.PagedList 1[System.Collections.Generic.KeyValuePair 2 [MyProject.Data.Models.User, System.Collections.Generic.IEnumerable`1 [MyProject.Data.Models.Role]]] ', но для этого словаря требуется элемент модели типа

Я могу сделать пейджинг, но только для одной модели, например, с использованием кода "View (db.Roles.ToList (). ToPagedList (pageNumber, pageSize))" . Но для этого случая все по-другому, здесь я использую две модели, а именно User и Role. Я использую словарь для вызова двух моделей. Я не совсем понимаю, как реализовать это с помощью PagedList. Это код, который я пробовал. Спасибо

public ActionResult Index(int? page)
{
    int pageSize = 2;
    int pageNumber = (page ?? 1);
    Dictionary<User, IEnumerable<Role>> userRoles = userRoleRepo.GetDictionary_UserAndRolesOfEachUser();
   return View(userRoles.ToPagedList(pageNumber, pageSize));
}

View

 @model PagedList.IPagedList<Dictionary<MyProject.Data.Models.User, IEnumerable<MyProject.Data.Models.Role>>>
 <table class="table">
    <tr class="header">
        <th> UserName</th>
        <th> FullName</th>
    </tr>
     @foreach (Dictionary<MyProject.Data.Models.User, IEnumerable<MyProject.Data.Models.Role>> item in Model)
     {
        <tr class="detail">
            <td>
                @Html.DisplayFor(modelItem => item.First().Key.UserName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.First().Key.FullName)
            </td>
            <td>
                <ul>
                    @foreach (var role in item.First().Value)
                    {
                        <li>
                            @Html.DisplayFor(modelItem => role.RoleName)
                        </li>
                    }
                </ul>
            </td>
        </tr>
     }
 </table>

    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
    @Html.PagedListPager(Model, page => Url.Action("Index", new { page}))

1 Ответ

1 голос
/ 26 апреля 2019

Вы пробовали следующее?

@model PagedList.IPagedList<KeyValuePair<MyProject.Data.Models.User, IEnumerable<MyProject.Data.Models.Role>>>
...