ASP.NET MVC - передан элемент модели Generic.List, но требуется тип PagedList - PullRequest
1 голос
/ 19 сентября 2019

Я новичок во всем этом, и у меня проблемы с подкачкой в ​​приложении App.net 4.7.2 MVC.Я получаю следующую ошибку:

"Элемент модели, переданный в словарь, имеет тип 'System.Collections.Generic.List 1[AIAR.Models.PIAModel]', but this dictionary requires a model item of type 'PagedList.IPagedList 1 [AIAR.Models.PIAModel]'."

Я думаю, что понимаю проблему, так как я использую общий список в моем контроллере, но я просто не уверен, как решить его.Я просматривал все Googles в течение некоторого времени и просто не могу понять это.Любая помощь приветствуется.Пожалуйста, дайте мне знать, если мне нужно предоставить что-нибудь еще.

Секция контроллера:

public ActionResult ViewPIAS(string searchBy, string search,int? page)
        {
            ViewBag.Message = "PIA List";

            var data = LoadPIAS();
            List<PIAModel> PIAS = new List<PIAModel>();

            foreach (var row in data)
            {
                PIAS.Add(new PIAModel
                {
                    Id = row.Id,
                    AssetName = row.AssetName,
                    AssetDescription = row.AssetDescription,
                    Unit = row.Unit,
                    InformationAssetCustodian = row.InformationAssetCustodian

                });

            }
            if (searchBy == "AssetName")
            {
                return View(PIAS.Where(x => x.AssetName.StartsWith(search)).ToPagedList(page ?? 1, 3).ToList());
            }
            else if(searchBy == "AssetDescription")
            {
                return View(PIAS.Where(x => x.AssetDescription.StartsWith(search)).ToPagedList(page ?? 1, 3).ToList());
            }
            else
                return View(PIAS);
        }

Вид:

@model IPagedList<AIAR.Models.PIAModel>
@using PagedList;
@using PagedList.Mvc;

@{
    ViewBag.Title = "ViewPIAS";
}

<h2>ViewPIAS</h2>

<p>
    @Html.ActionLink("Create New", "NewPIA")
</p>
<p>
    @using (Html.BeginForm("ViewPIAS", "PIA", FormMethod.Get))
    {
        <div>@Html.ActionLink("Return Search Defaults", "ViewPIAS")</div>
        <b>Search By:</b>
        @Html.RadioButton("searchBy", "AssetName") <text>AssetName</text> @Html.RadioButton("searchBy", "AssetDescription") <text>Asset Description</text><br />
        @Html.TextBox("search")<input type="submit" value="Search" />
    }
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.First().Id)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().AssetName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().AssetDescription)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().Unit)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().InformationAssetCustodian)
        </th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Id)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.AssetName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.AssetDescription)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Unit)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.InformationAssetCustodian)
            </td>
            <td>
                @Html.ActionLink("Edit", "EditPIA", new { id = item.Id }) |
                @Html.ActionLink("Details", "ViewPIA", new { id = item.Id }) |
                @Html.ActionLink("Delete", "DeletePIA", new { id = item.Id })
            </td>
        </tr>
    }

</table>
@Html.PagedListPager(Model, page => Url.Action("ViewPIAS", new { page }))

Модель:

namespace AIAR.Models
{
    public class PIAModel
    {

        [Display(Name = "Id")]
        public int Id { get; set; }

        [Display(Name = "Asset Name")]
        public string AssetName { get; set; }

        [Display(Name = "Asset Description")]
        public string AssetDescription { get; set; }

        [Display(Name = "Unit")]
        public string Unit { get; set; }

        [Display(Name = "Information Asset Custodian")]
        public string InformationAssetCustodian { get; set; }
    }
}

Благодарю вас!

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Удалось заставить это работать на днях, ребята.

 int recordsPerPage = 10;
            var list = PIAS.ToList().ToPagedList(page, recordsPerPage);

            if (searchBy == "AssetName")
            {
                var assetnamesearch = list.Where(x => x.AssetName.Contains(search));
                return View(assetnamesearch.ToList().ToPagedList(page, recordsPerPage));
            }
            else
                return View(list);
            }

Спасибо за все ответы!

0 голосов
/ 19 сентября 2019

решение состоит в том, что вы используете интерфейс IList как в контроллере, так и в представлении, привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...