2014-01-16 2 views
2

У меня есть страница поиска, которая возвращает мои результаты по нескольким страницам. Это работает очень хорошо. Вот код:Webmatrix - изменение переменных винтов с результатами поиска

//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; 
} 

Любые идеи, ребята?

+0

просто мысль, выборка/смещение даже лучший метод для этого, так как я использую SQL Express? Я только что прочитал, что это в основном используется для SQL compact? – Gavin5511

+1

'OFFSET' и' FETCH' поддерживаются SQL Express начиная с версии 2012. – GmG

+0

Отлично, спасибо за информацию. Я не ближе к решению моей проблемы, но хорошо знать, что я не использую неправильный код полностью! – Gavin5511

ответ

1

Я тестировал код со следующими небольшими изменениями в сочетании с SQL Server 2012 Экспресс база данных:

@{ 
    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/@[email protected](Request.QueryString.ToString().Length == 0 ? 
       null : "?" + Request.QueryString)">@i</a> 
      } 
     } 
    </body> 
</html> 

Все отлично работает для меня, но я видел из вашей ссылки, что реальный код является гораздо более сложный.
Попробуйте начать с этого рабочего примера и добавьте шаг за шагом ваш другой код.

Смежные вопросы