Asp.net 带变量的MVC 4跳过函数显示不必要的错误

Asp.net 带变量的MVC 4跳过函数显示不必要的错误,asp.net,entity-framework,asp.net-mvc-4,pagination,skip,Asp.net,Entity Framework,Asp.net Mvc 4,Pagination,Skip,我想用实体数据模型在MVC4中创建分页。我的主页/nametailspage工作正常,一次返回所有行。但是我想用分页来显示这些数据,因为有这么多行。所以我试过这样做 public ActionResult NameDetailsPage(int page) { var context = new BlogContext(); IQueryable<string> list; list = from m in context.

我想用实体数据模型在MVC4中创建分页。我的主页/nametailspage工作正常,一次返回所有行。但是我想用分页来显示这些数据,因为有这么多行。所以我试过这样做

 public ActionResult NameDetailsPage(int page)
    {

        var context = new BlogContext();
        IQueryable<string> list;
        list = from m in context.Blogs.OrderBy(m => m.BlogId)
               select m.Name;

         ViewBag.total=list.ToArray().Length;

        return View("NameDetails", list.Skip(page * 4).Take(4));
    }

我该怎么办?提前感谢。

基于错误,使参数为null满足预期条件。下面的NameDetailsPage()方法的开头演示了这一点

关于LINQtoEntities的另一个建议(不是询问,而是提供)是避免在本地拉取整个集合,请参见下面的.Count()用法

就代码组织而言,我将分页位放在顶部的原因是,如果出现问题,即客户机请求page-1(添加验证),这将在访问数据存储之前得到处理

我还将LINQ查询本身更改为专门使用扩展方法。这可以通过将LINQ查询更改为专门使用集成查询语法来实现。关键是尽可能多地使用其中一种。代码维护人员必须同时考虑两种语法,这是一个不必要的困难

public ActionResult NameDetailsPage(int? page)
{
    // TODO: add validation of parameters
    // TODO: REVIEW page size as a hard-coded constant will likely become a user-input
    const int pageSize = 4;
    var pageNumberRequested = page ?? 1; //<< assuming page is 1-based, a person would say "page 1"
    var skipRecords = (pageNumberRequested - 1) * pageSize;
    var takeRecords = pageSize;

    var context = new BlogContext();
    var blogEntries = context.Blogs.OrderBy(blog => blog.BlogId)
                          .Select(blog => blog.Name);

    var totalCount = blogEntries.Count(); //<< let the server-side use an index rather than shipping all of the records, which is a huge amount of Net I/O, then using a huge amount of RAM to create an array, only to get the number of elements in the array.

    var pageOfBlogEntries = blogEntries.Skip(skipRecords).Take(takeRecords);

    ViewBag.total = totalCount;

    return View("NameDetails", pageOfBlogEntries);
}
public ActionResult nametailspage(int?页)
{
//TODO:添加参数验证
//TODO:查看页面大小,因为硬编码常量可能会成为用户输入
常量int pageSize=4;
var pageNumberRequested=第1页;//blog.BlogId)
.Select(blog=>blog.Name);

var totalCount=blogoentries.Count();//基于错误,使参数为null满足预期条件。这在下面的方法NameDetailsPage()的开头演示

关于LINQtoEntities的另一个建议(不是询问,而是提供)是避免在本地拉取整个集合,请参见下面的.Count()用法

就代码组织而言,我将分页位放在顶部的原因是,如果出现问题,即客户机请求page-1(添加验证),这将在访问数据存储之前得到处理

我还将LINQ查询本身更改为专门使用扩展方法。这可以通过将LINQ查询更改为专门使用集成查询语法来实现。重点是尽可能多地使用其中一种语法。代码维护人员必须同时考虑synt和斧头

public ActionResult NameDetailsPage(int? page)
{
    // TODO: add validation of parameters
    // TODO: REVIEW page size as a hard-coded constant will likely become a user-input
    const int pageSize = 4;
    var pageNumberRequested = page ?? 1; //<< assuming page is 1-based, a person would say "page 1"
    var skipRecords = (pageNumberRequested - 1) * pageSize;
    var takeRecords = pageSize;

    var context = new BlogContext();
    var blogEntries = context.Blogs.OrderBy(blog => blog.BlogId)
                          .Select(blog => blog.Name);

    var totalCount = blogEntries.Count(); //<< let the server-side use an index rather than shipping all of the records, which is a huge amount of Net I/O, then using a huge amount of RAM to create an array, only to get the number of elements in the array.

    var pageOfBlogEntries = blogEntries.Skip(skipRecords).Take(takeRecords);

    ViewBag.total = totalCount;

    return View("NameDetails", pageOfBlogEntries);
}
public ActionResult nametailspage(int?页)
{
//TODO:添加参数验证
//TODO:查看页面大小,因为硬编码常量可能会成为用户输入
常量int pageSize=4;
var pageNumberRequested=第1页;//blog.BlogId)
.Select(blog=>blog.Name);

var totalCount=blogoentries.Count();//错误给出了答案;
page
是一个非可选参数。 换句话说,路由引擎找不到合适的无参数操作方法,或具有可选参数的操作方法

您需要将
page
设置为可选参数

public ActionResult NameDetailsPage(int page = 1)
{
...

或者通过路由定义传递默认值。

错误会给出答案;
页面
是非可选参数。 换句话说,路由引擎找不到合适的无参数操作方法,或具有可选参数的操作方法

您需要将
page
设置为可选参数

public ActionResult NameDetailsPage(int page = 1)
{
...

或者通过路由定义传递默认值。

我已将我的函数替换为您的函数,但这会删除错误,但页面变量不起作用@paegun页面变量总是从其他地方接收相同的值,即在视图中可能存在分页控件,例如将javascript绑定到单击事件的超链接。That代码需要请求操作NameDetailsPage,包括请求页面的值。或者(不是AJAXy),有一个表单有操作NameDetailsPage,还有一个输入控件名为“page”匹配操作的参数。无论哪种方式,客户端都需要为操作发送页面,以相应地处理请求。我已将我的函数替换为您的函数,但这会删除错误,但页面变量不起作用@Paegun页面变量始终接收来自其他位置的相同值,即在视图中可能存在分页co控件,例如将javascript绑定到单击事件的超链接。该代码需要请求操作名DetailsPage,包括所请求页面的值。或者(不是AJAXy),有一个具有操作名DetailsPage的表单,还有一个名为“page”的输入控件匹配操作的参数。无论哪种方式,客户端都需要为操作发送页面以相应地处理请求。我已经尝试过了。它会删除错误,但分页不起作用。页面变量始终获取默认参数。@sharif您如何构造分页链接?如果您试图将页面作为路径中的一个参数(即/home/nametailspage/2/),则需要创建一个适合的路由定义。否则,通过查询字符串传递页面将自动绑定到页面参数(即/home/nametailspage?page=2).就在你最近的评论之后,我已经解决了我的问题。非常感谢。请帮我一个简单的忙,如果我想使用像/home/nametailspage/2这样的语言,我应该写些什么,因为/home/nametailspage?page=2非常好。再次感谢。@sharif尝试回答了你提出的关于路线的另一个问题。希望它能有所帮助hanks@brent。我以为你走了。一个站起来接受了你的ans:)我已经尝试过了。它会删除错误,但分页不起作用。Page变量总是得到默认参数。@sharif你是如何构造分页链接的?如果你试图将页作为参数包含在