Asp.net Core如何使用ReflectionIT.Mvc.Paging与ViewModel?

问题描述 投票:0回答:1

我想在 Asp.net Core 2.2 中使用带有

ViewModel
的分页。

您可以在下面看到我的代码

公共类 UserQuestionListComplexViewModel
{
   //该类中有2个ViewModel

    公共 UserPanelViewModel 模型1 { 获取;放; }
    公共列表模型2 {获取;放; }
}

在我的控制器中

公共类 UserHomeController :控制器
{
    私有只读 UserManager _userManager;
    私有只读 IQuestionRepository _iq;

    公共 UserHomeController(UserManager userManager, 
        IQuestionRepository iq)
    {
        _userManager = 用户管理器;
        _iq = 智商;
    }

    [http获取]
    公共异步任务 QuestionList(UserQuestionListComplexViewModel 模型,
      整数页 = 1)
    {
        var query = _iq.UserQuestionList(_userManager.GetUserId(HttpContext.User), page);
        model.UQVM = 等待查询;
        返回视图(模型);
    }
}

下面是QuestionRepository

公共异步任务> UserQuestionList(string UserID, 
  整数页 = 1)
{
    var QuestionQuery = (来自 _db.QuestionTbl 中的 q
                         其中 q.UserID == UserID
                         选择新的 UserQuestionListViewModel()
                         {
                             ....
                         })
                         .AsNoTracking()
                         .Where(q => q.qflag == 0)
                         .OrderBy(q => q.QuestionID);

    var pagedResult = 等待 PagingList.CreateAsync(
        问题查询,1,页);
        
    返回分页结果;
}

最后View.cshtml

@model UserQuestionListComplexViewModel
@using ReflectionIT.Mvc.Paging

@await Component.InvokeAsync("UserInfo", Model.Model1)

<div>  
    <table>
        <thead class="thead-dark">
            <tr>
                <td>...</td>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.Model2)
            {
                <tr>
                    <td>...</td>
                </tr>
            }
        </tbody>
    </table>

    <nav class="pagenav">
        @await this.Component.InvokeAsync("Pager", new { PagingList = this.Model })
    </nav>
</div>

但是我遇到了以下错误

InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“ReflectionIT.Mvc.Paging.PagingList`1[porseman.Models.ViewModels.UserQuestionListViewModel]”,但此 ViewDataDictionary 实例需要类型为“porseman.Areas.UserPanel”的模型项.Models.UserComplexViewModel.UserQuestionListComplexViewModel'.

asp.net-core .net-core pagination viewmodel
1个回答
2
投票

看看你的

PagingList
创建函数,类型是
UserQuestionListViewModel
:

 var pagedResult = await PagingList<UserQuestionListViewModel>.CreateAsync(questionQuery, 1, page);

但是当你在 view 中配置

PagingList
时,你正在设置类型
UserQuestionListComplexViewModel
,所以替换这一行:

 @await this.Component.InvokeAsync("Pager", new { PagingList = this.Model })

与:

 @await this.Component.InvokeAsync("Pager", new { PagingList = this.Model.Model2 })

此外,您可能需要在视图模型中将类型

Model2
更改为
PagingList<UserQuestionListViewModel>
:

public PagingList<UserQuestionListViewModel> Model2 { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.