我想在 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'.
看看你的
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; }