Asp.net mvc ASP.NET MVC查询帮助
我的应用程序上有以下索引方法,显示了一系列文章:Asp.net mvc ASP.NET MVC查询帮助,asp.net-mvc,linq,pagination,Asp.net Mvc,Linq,Pagination,我的应用程序上有以下索引方法,显示了一系列文章: public ActionResult Index(String query) { var ArticleQuery = from m in _db.ArticleSet select m; if (!string.IsNullOrEmpty(query)) { ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
public ActionResult Index(String query)
{
var ArticleQuery = from m in _db.ArticleSet select m;
if (!string.IsNullOrEmpty(query))
{
ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
}
//ArticleQuery = ArticleQuery.OrderBy(m.posted descending);
return View(ArticleQuery.ToList());
}
它还兼作搜索机制,通过抓取查询字符串(如果存在)
问题1.)OrderBy不起作用,我需要对其进行什么更改才能使其按发布日期降序显示结果
问题2.)我将添加一个非常简单的分页,因此每页只显示4个结果。我该怎么做才是最好的?谢谢
编辑:除了问题2之外,我正在寻找一个简单的助手类解决方案,以便在当前代码中实现上述分页。这个看起来很好(http://weblogs.asp.net/andrewrea/archive/2008/07/01/asp-net-mvc-quot-pager-quot-html-helper.aspx),但如何在应用程序中实现它。谢谢
public ActionResult Index(String query, int? page)
{
var pagesize = 4; // can also be a parameter and/or a configuration setting
var ArticleQuery = from m in _db.ArticleSet select m;
if (!string.IsNullOrEmpty(query))
{
ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
}
ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
return View(ArticleQuery.AsPagination(page, pageSize));
}
2/在您看来,您可以使用MvcContrib pager helper方法,如下所示:
<%= Html.Pager((IPagination)Model)%>
这将输出一个不错的寻呼机控件
下面是另一种解释,它也使用MvcContrib网格控件(不是必需的):
public ActionResult Index(String query, int? page)
{
var pagesize = 4; // can also be a parameter and/or a configuration setting
var ArticleQuery = from m in _db.ArticleSet select m;
if (!string.IsNullOrEmpty(query))
{
ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
}
ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
return View(ArticleQuery.AsPagination(page, pageSize));
}
2/在您看来,您可以使用MvcContrib pager helper方法,如下所示:
<%= Html.Pager((IPagination)Model)%>
这将输出一个不错的寻呼机控件
下面是另一种解释,它也使用MvcContrib网格控件(不是必需的):您需要按如下方式重新构造(假设第0页是第一页):
有很多分页解决方案,我不推荐任何一种。上面的代码演示了一个后端实现,它将显示页面,您仍然需要显示页面,等等。您需要按如下方式重新构造页面(假设第0页是第一页): 有很多分页解决方案,我不推荐任何一种。上面的代码演示了一个后端实现,它将分页,您仍然需要显示分页器,等等。Cameron 我希望通过一个下载链接的例子能对你有所帮助。我为网站上的其他人制作了这个小应用程序,以帮助解决类似的问题。基本上,它展示了如何创建IPagedList接口 i、 e 然后创建一个具体的类,并通过querystring参数(包括OrderBy等)填充它 大概是这样的:
public class Test
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int SerialNumber { get; set; }
}
public class TestCollection : IPagedList
{
public IList<Test> TestList { get; set; }
// purely for test purposes
public int PageIndex{ get; set; }
public int PageSize { get; set; }
public int TotalPages{ get; set; }
public TestCollection()
{
TestList = new List<Test>();
}
}
公共类测试
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共整数序列号{get;set;}
}
公共类TestCollection:IPagedList
{
公共IList测试列表{get;set;}
//纯粹用于测试目的
公共int页索引{get;set;}
公共int PageSize{get;set;}
公共整型TotalPages{get;set;}
公共测试集合()
{
TestList=新列表();
}
}
下面是它的外观:
你可以在这里找到它:
祝你玩得开心。卡梅隆
我希望通过一个下载链接的例子能对你有所帮助。我为网站上的其他人制作了这个小应用程序,以帮助解决类似的问题。基本上,它展示了如何创建IPagedList接口
i、 e
然后创建一个具体的类,并通过querystring参数(包括OrderBy等)填充它
大概是这样的:
public class Test
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int SerialNumber { get; set; }
}
public class TestCollection : IPagedList
{
public IList<Test> TestList { get; set; }
// purely for test purposes
public int PageIndex{ get; set; }
public int PageSize { get; set; }
public int TotalPages{ get; set; }
public TestCollection()
{
TestList = new List<Test>();
}
}
公共类测试
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共整数序列号{get;set;}
}
公共类TestCollection:IPagedList
{
公共IList测试列表{get;set;}
//纯粹用于测试目的
公共int页索引{get;set;}
公共int PageSize{get;set;}
公共整型TotalPages{get;set;}
公共测试集合()
{
TestList=新列表();
}
}
下面是它的外观:
你可以在这里找到它:
祝您玩得开心。问题1:OrderBy(和OrderByDescending,我认为这是您想要的)方法要求您传递一个函数来指定如何执行排序。大多数人选择使用lambda表达式来执行此操作:
ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
有关更多详细信息,请参阅
问题2:您需要更改操作方法以接受页码和页面大小参数,然后从视图中传递这些参数。在LINQ查询中,您将使用我喜欢称之为“跳过+获取”的方法:
问题#1:OrderBy(和OrderByDescending,我认为这是您想要的)方法要求您传递一个函数来指定如何执行排序。大多数人选择使用lambda表达式来执行此操作:
ArticleQuery = ArticleQuery.OrderByDescending(m => m.posted);
有关更多详细信息,请参阅
问题2:您需要更改操作方法以接受页码和页面大小参数,然后从视图中传递这些参数。在LINQ查询中,您将使用我喜欢称之为“跳过+获取”的方法:
您可以将orderby添加到原始查询中,可以使用.Take([number])完成前4项
您可以将orderby添加到原始查询中,可以使用.Take([number])完成前4项
我从最高层回答这个问题
public ActionResult Index(string query, int page)
{
var ArticleQuery = from m in _db.ArticleSet select m;
if (!string.IsNullOrEmpty(query))
{
ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
}
return View(ArticleQuery.OrderByDecending(a => a.posted).Skip(page * 4).Take(4).ToList());
}
int PageSize = 4;
public ActionResult Index(String query, int page)
{
IOrderedEnumerable ArticleQuery = (from m in _db.ArticleSet select m);
if (!string.IsNullOrEmpty(query))
{
ArticleQuery = ArticleQuery.Where(m => m.headline.Contains(query));
}
ArticleQuery = ArticleQuery.Skip(PageSize * (page - 1)).Take(PageSize).OrderBy(m.posted descending);
return View(ArticleQuery.ToList());
}