C# 如何在asp.net mvc 5中解决此分页错误?
我有一个asp.NETMVC5视图。我有以下代码:C# 如何在asp.net mvc 5中解决此分页错误?,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我有一个asp.NETMVC5视图。我有以下代码: @model PagedList.IPagedList<parishV3.Models.HeadsViewModel> @using PagedList; @using PagedList.Mvc; <link href="~/Content/css/PagedList.css" rel="stylesheet" /> @using (Html.BeginForm("Index", "Heads", FormMetho
@model PagedList.IPagedList<parishV3.Models.HeadsViewModel>
@using PagedList;
@using PagedList.Mvc;
<link href="~/Content/css/PagedList.css" rel="stylesheet" />
@using (Html.BeginForm("Index", "Heads", FormMethod.Get))
{
<p>
<b> Find by name:</b>@Html.RadioButton("findBy", "fname") <text>First Name</text>
@Html.RadioButton("findBy", "lname")<text>Last Name</text><br />
@Html.RadioButton("findBy", "h_no")<text>Header Number</text><br />
@Html.TextBox("Seach_Data", ViewBag.FilterValue as string, ViewBag.CurrentFilter as string)
<input type="submit" value="Find" />
</p>
}
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, findby = Request.QueryString["findby"], Seach_Data = Request.QueryString["Seach_Data"] }))
@model PagedList.IPagedList
@使用页面列表;
@使用PagedList.Mvc;
@使用(Html.BeginForm(“Index”,“Heads”,FormMethod.Get))
{
按名称查找:@Html.RadioButton(“findBy”、“fname”)名字
@Html.RadioButton(“findBy”、“lname”)姓氏
@Html.RadioButton(“findBy”、“h_no”)标题编号
@TextBox(“搜索数据”,ViewBag.FilterValue为字符串,ViewBag.CurrentFilter为字符串)
}
@Model.PageCount的@页(Model.PageCountUrl.Action(“Index”,new{page,findby=Request.QueryString[“findby”],Seach_Data=Request.QueryString[“Seach_Data”]}))
控制器
public ActionResult Index(string Seach_Data, string findby, int? page, string currentFilter )
{
if (findby == "fname")
{
string query = "SELECT v.h_no as h_no, v.h_initials , v.h_id as h_id , t.titles as titles, p.Suburb as Suburb, p.flatNo as flatNo, p.flatName as flatName,v.Email as Email, v.cell as cell, v.tel_h as tel_h, v.fname as fname, p.strname as strname, p.strNo as strNo, p.City as City, LEFT(v.lname, 255) as lname from [dbo].[Heads] v, [dbo].[Addresses1] p, [dbo].[Titles] t WHERE v.[h_ID] = p.[h_id] and v.[title_id]= t.[title_id] ";
var ViewModel = db.Database.SqlQuery<HeadsViewModel>(query);
return View(ViewModel.Where(x => x.fname == Seach_Data).ToList().ToPagedList(page ?? 1, 4));
}
else if (findby == "lname")
{
string query = "SELECT v.h_no as h_no, v.h_initials , v.h_id as h_id , t.titles as titles, p.Suburb as Suburb, p.flatNo as flatNo, p.flatName as flatName,v.Email as Email, v.cell as cell, v.tel_h as tel_h, v.fname as fname, p.strname as strname, p.strNo as strNo, p.City as City, LEFT(v.lname, 255) as lname from [dbo].[Heads] v, [dbo].[Addresses1] p, [dbo].[Titles] t WHERE v.[h_ID] = p.[h_id] and v.[title_id]= t.[title_id] ";
var ViewModel = db.Database.SqlQuery<HeadsViewModel>(query);
return View(ViewModel.Where(x => x.lname == Seach_Data).ToList().ToPagedList(page ?? 1, 6));
}
else
{
string query = "SELECT v.h_no as h_no, v.h_initials , v.h_id as h_id , t.titles as titles, p.Suburb as Suburb, p.flatNo as flatNo, p.flatName as flatName,v.Email as Email, v.cell as cell, v.tel_h as tel_h, v.fname as fname, p.strname as strname, p.strNo as strNo, p.City as City, LEFT(v.lname, 255) as lname from [dbo].[Heads] v, [dbo].[Addresses1] p, [dbo].[Titles] t WHERE v.[h_ID] = p.[h_id] and v.[title_id]= t.[title_id] ";
var ViewModel = db.Database.SqlQuery<HeadsViewModel>(query);
return View(ViewModel);
}
}
public ActionResult索引(string Seach_Data,string findby,int?page,string currentFilter)
{
如果(findby==“fname”)
{
string query=“选择v.h_no作为h_no,v.h_首字母缩写,v.h_id作为h_id,t.titles作为title,p.郊区作为郊区,p.flatNo作为flatNo,p.flatName作为flatName,v.Email作为Email,v.cell作为cell,v.tel_h作为tel_h,v.fname作为fname,p.strname作为strname,p.strNo作为strNo,p.City作为City,左(v.lname,255)作为[dbo]的lname.[Heads]v[dbo]。[地址1]p[dbo].[Titles]t其中v.[h_ID]=p.[h_ID]和v.[title_ID]=t.[title_ID]”;
var ViewModel=db.Database.SqlQuery(查询);
返回视图(ViewModel.Where(x=>x.fname==Seach_Data).ToList().ToPagedList(第1、4页));
}
else if(findby==“lname”)
{
string query=“选择v.h_no作为h_no,v.h_首字母缩写,v.h_id作为h_id,t.titles作为title,p.郊区作为郊区,p.flatNo作为flatNo,p.flatName作为flatName,v.Email作为Email,v.cell作为cell,v.tel_h作为tel_h,v.fname作为fname,p.strname作为strname,p.strNo作为strNo,p.City作为City,左(v.lname,255)作为[dbo]的lname.[Heads]v[dbo].[1]p[dbo].[Titles]t其中v.[h_ID]=p.[h_ID]和v.[title_ID]=t.[title_ID]”;
var ViewModel=db.Database.SqlQuery(查询);
返回视图(ViewModel.Where(x=>x.lname==Seach_Data).ToList().ToPagedList(第1、6页));
}
其他的
{
string query=“选择v.h_no作为h_no,v.h_首字母缩写,v.h_id作为h_id,t.titles作为title,p.郊区作为郊区,p.flatNo作为flatNo,p.flatName作为flatName,v.Email作为Email,v.cell作为cell,v.tel_h作为tel_h,v.fname作为fname,p.strname作为strname,p.strNo作为strNo,p.City作为City,左(v.lname,255)作为[dbo]的lname.[Heads]v[dbo].[1]p[dbo].[Titles]t其中v.[h_ID]=p.[h_ID]和v.[title_ID]=t.[title_ID]”;
var ViewModel=db.Database.SqlQuery(查询);
返回视图(ViewModel);
}
}
我的问题是,当我运行项目时,它会给我一个错误,上面写着:
System.InvalidOperationException:传递到字典的模型项的类型为
System.Data.Entity.Infrastructure.DbRawSqlQuery1[parishV3.Models.HeadViewModel],但此词典需要“PagedList.IPagedList
1[parishV3.Models.HeadViewModel]”类型的模型项。”
在初始页面加载中,
findby
的值为空,因此执行else
块,返回DbRawSqlQuery1
,但视图要求模型为IPagedList1
。将else
块更改为
else
{
string query = ".....";
var ViewModel = db.Database.SqlQuery<HeadsViewModel>(query);
return View(ViewModel.ToList().ToPagedList(1, 6));
}
else
{
字符串查询=“…”;
var ViewModel=db.Database.SqlQuery(查询);
返回视图(ViewModel.ToList().ToPagedList(1,6));
}
注意:当使用分页列表时,您的查询应包括一个
OrderBy
子句,以确保集合始终以相同的顺序返回,否则您可能会得到不可预测的结果。检查您返回的模型类型是否与视图中定义的模型匹配。请显示索引操作的所有代码,很可能返回的是错误的控制器中的modelEmbedded sql在许多级别上都是错误的,这是最糟糕的做法。消息告诉您需要知道的一切-您没有向模型传递PagedList.IPagedList
,因此请更改您的操作方法以返回它!@StephenMuecke如果您想要分页,您可以帮助我使用操作方法上应该使用的代码吗更改另一个数字您必须执行此操作“ToPagedList(第1、6页)”当然,但我假设else
块仅用于初始页面加载,在这种情况下,您需要第一页,这就是我刚才执行ToPagedList(1、6)
的原因,但如果在其他情况下查找到的可能为空,最好使用(第1、6页)
。