2013-12-03 3 views
0

Я пытаюсь реализовать очень простые методы подкачки в MVC 2.0Простой подкачки в MVC 2

У меня есть модель клиента, которая выглядит как этот

public class Customer 
{ 
public string name{get;set;} 
public string address{get;set;} 
public string city{get;set;} 
} 

Сейчас в индексе контроллера У меня есть фиктивная коллекция или список, который я передаю, чтобы посмотреть, как этот

ActionResult index(int page=1) 
{ 
List<Customer> col=new List<Customer>(); 
col.Add(new Customer(.....) 
..... 
ViewData["PagedList"]=col.skip((page-1)*pagesize)*take(pagesize); 
return View(); 
} 

Сейчас в View у меня есть выпадающий список

<select id="dropdown" onChange="getthis()"> 
<option>1</option> 
<option>2</option> 
<option>3</option> //This are page no hardcoded 
<option>4</option> 
<option>5</option> 
</select> 

Теперь внутри цикла foreach я просматриваю все ViewData, переданные с контроллера, и он отлично работает.

Когда пользователь изменяет страницу не из выпадающего списка я передать его на контроллер, как этот

function getthis() 
{ 
var page=//get page no from dropdown 
self.location="/Home/Index?page=" + page 
} 

это также извлекает корректные данные, но он сбрасывает значение обратно 1.My вопрос, как я могу держать в раскрывающемся списке выбран значение (номер страницы) после смены страницы?

Помощь будет очень было оценено

ответ

0

Ok после победы над головой около 1 дня я наконец-то изменилось approach.I теперь возвращаюсь мой объект в JsonResult вместо ActionResult ,

public JsonResult CustomerList(int page=1) 
{ 
List<Customer> col=new List<Customer>(); 
col.Add(new Customer(.....) 
..... 
var result=col.skip((page-1)*pagesize)*take(pagesize); 
return Json(result,JsonBehaviour.AllowGet); 
} 

Учитывая теперь делает Ajax вызов этого метода контроллера, как этот

$.getJson('/Home/CustomerList?page=' + pagefromdropdownselction,function(data){ 
    //here I loop through the data and form html table accordingly. 
$.each(data,function(key,value){ 
    }); 
}); 

Таким образом, он работает ожидаемо.

0

пытаются с помощью document.getElementById из JavaScript, для образца:

function getthis() 
{ 
    var drop = document.getElementById("dropdown"); 
    var page = drop.options[drop.selectedIndex].value; 

    self.location = "<%=Url.Action("Index", "Home")%>?page=" + page; 
} 

Примечание: Если вы используете asp.net-mvc и этот браузер на взгляд, вы могли бы использовать UrlHelper объект от Url Недвижимость для добавления маршрута. Он будет использовать таблицы маршрутов, определенные на asp.net mvc.

0

вы можете сделать это с JavaScript и локального хранилища для хранения значения

$(document).ready(function() { 
    $("#dropdown").val(localStorage.page); 

    // or you can also get the query string 
$("#dropdown").val(getParameterByName('page')); 

}); 

function getParameterByName(name) { 
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), 
     results = regex.exec(location.search); 
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

function getthis() 
{ 
    var page=//get page no from dropdown 
    self.location="/Home/Index?page=" + page 
    localStorage.page=1; 
} 
+0

Я попытался как вы предложили функцию getthis() { // debugger; var drop = document.getElementById ("выпадающий список"); var page = drop.options [drop.selectedIndex] .value; self.location = "/ Home/Index? Page =" + page; localStorage ['dropdown'] = document.getElementById ("выпадающее меню"). Значение; if (localStorage ['dropdown']! = 1) { document.getElementById ("dropdown"). Value = localStorage ['dropdown']; } } –

+0

Но все же не повезло. –

+0

попробуйте оповещение, если вы получите одинаковое значение –