【发布时间】:2013-09-14 07:12:58
【问题描述】:
我正在使用http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application 的示例实现一个简单的分页列表索引
我的问题是,当我翻到第二页时,搜索字符串“丢失”了,所以我显示的不是一组过滤的结果,而是所有记录。
我的 index.cshtml:
@using (Html.BeginForm("Index", "", FormMethod.Get))
{
<p>
@Html.TextBox("searchString", ViewBag.currentFilter as string, new { @placeholder = "Search by title or author" })
<input type="submit" value="Search" />
</p>
}
@if (Model.PageCount > 1)
{
@Html.PagedListPager( Model, page => Url.Action("Index", new { page }) )
}
我的控制器:
public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.TitleSortParm = sortOrder == "Title" ? "Title desc" : "Title";
ViewBag.AuthorSortParm = sortOrder == "Author" ? "Author desc" : "Author";
ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date";
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.currentFilter = searchString;
var Articles = from a in db.Articles
select a;
if (!String.IsNullOrEmpty(searchString))
{
//page = 1;
Insights = Articles.Where(s => s.Title.ToUpper().Contains(searchString.ToUpper())
|| s.Author.ToUpper().Contains(searchString.ToUpper()));
}
switch (sortOrder)
{
case "Author":
Insights = Articles.OrderBy(s => s.Author);
break;
case "Author desc":
Insights = Articles.OrderByDescending(s => s.Author);
break;
case "Title":
Insights = Articles.OrderBy(s => s.Title);
break;
case "Title desc":
Insights = Articles.OrderByDescending(s => s.Title);
break;
case "Date":
Insights = Articles.OrderBy(s => s.DatePublished);
break;
default:
Insights = Articles.OrderByDescending(s => s.DatePublished);
break;
}
int pageSize = 3;
int pageNumber = (page ?? 1);
return View(Articles.ToPagedList(pageNumber, pageSize));
}
以第 2 页为例,我的所有变量 sortOrder、currentFilter 和 searchString 都为空。
罗比
【问题讨论】:
-
我没有看到在控制器操作中设置 ViewBag.CurrentSort 的代码。尝试添加它:ViewBag.CurrentSort = sortOrder;
-
searchString 的值是否返回到文本框?如果没有,那么您需要确保在搜索后将其传递回视图。
-
确实有,但仅限于第一篇文章,当我转到下一页时,它似乎没有被发回。
-
您的寻呼机在您的 CSHTML 中是什么样的?
标签: c# asp.net asp.net-mvc entity-framework pagedlist