【问题标题】:Webmatrix - changing variable screws with search resultsWebmatrix - 使用搜索结果更改可变螺丝
【发布时间】:2014-01-16 11:05:36
【问题描述】:

我有一个搜索页面,它会在多个页面上返回我的结果。这真的很好用。代码如下:

//Paging Variables

var pageSize = 6; 
var totalPages = 0; 
var count = 0;
var page = UrlData[0].IsInt() ? UrlData[0].AsInt() : 1;
var offset = (page -1) * pageSize;

string selectQueryString =  "SELECT * FROM Property_Info";

queryResults = db.Query(selectQueryString); 
count  = queryResults.Count();
totalPages = count/pageSize;        
if(count % pageSize > 0){
    totalPages += 1;
}

selectQueryString += "OFFSET @0 ROWS FETCH NEXT @1 ROWS  ONLY;";
queryResults = db.Query(selectQueryString, offset, pageSize);

我遇到的问题是,我想让用户选择更改每个页面上显示的属性数量。为此,我将“pageSize”变量设置为 0,该变量根据查询字符串而变化。

问题是,分页停止工作。当我转到第二页时,它显示的结果与第一页相同?

这是查询字符串代码:

//Set page size

if (Request.QueryString["pagesize"].AsInt() == 2)
{
    pageSize = 2;
} 
else
{
    pageSize = 4;
}

各位有什么想法吗?

【问题讨论】:

  • 只是一个想法,因为我使用的是 SQL Express,所以 fetch/offset 是不是最好的方法?我刚看了,这主要用于SQL compact?
  • SQL Express 从 2012 版开始支持 OFFSETFETCH
  • 太好了,感谢您提供的信息。我没有更接近解决我的问题,但很高兴知道我没有完全使用错误的代码!
  • 你能展示你的代码吗?即你把你的“查询字符串代码”放在哪里?
  • 好的,我会上传完整代码并发布链接。

标签: razor pagination webmatrix


【解决方案1】:

我已经结合 SQL Server 2012 Express 数据库对您的代码进行了以下小改动:

@{
    var pageSize = Request.QueryString["pagesize"].AsInt() == 2 ? 2 : 4;
    var totalPages = 0; 
    var count = 0;
    var page = UrlData[0].IsInt() ? UrlData[0].AsInt() : 1;
    var offset = (page -1) * pageSize;

    var db = Database.Open("yourDb");
    var selectQueryString = "SELECT * FROM Property_Info";

    count = db.Query(selectQueryString).Count();
    totalPages = count/pageSize;        
    if(count % pageSize > 0){
        totalPages += 1;
    }

    selectQueryString += " OFFSET @0 ROWS FETCH NEXT @1 ROWS ONLY";    
    var queryResult = db.Query(selectQueryString, offset, pageSize);
}
<!DOCTYPE html>
<html>
    <body> 

        <p>Page @page of @totalPages</p>

        @foreach(var row in queryResult){
            // here your activities on rows ....
        }

        @{
            for (var i = 1; i < totalPages + 1; i++){
            <a href="/search/@i@(Request.QueryString.ToString().Length == 0 ?
                null : "?" +   Request.QueryString)">@i</a>
            }
        }
    </body>
</html>

对我来说一切正常,但我从您的链接中看到真正的代码要复杂得多。
尝试从这个工作示例开始,逐步添加您的其他代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多