У меня есть вид с 1700 записями. Я хочу разбивать их на страницы с помощью ajax, чтобы сделать загрузку страницы легче. Я могу делать пейджинг и приносить множество новых записей каждый раз на основе выбранной страницы.Как передать данные с контроллера на просмотр с помощью IEnumerable Model в MVC?
Проблема Я показываю только 10 индексов в страницы дна, страница выбрана, а также 4 слева и 5 справа. Теперь мне нужно значение CurrentPage, которое я отправляю каждый раз из jQuery/ajax в контроллер, который я получаю как параметр данных ajax. Проблема заключается в возврате значения текущей страницы, которое постоянно просматривается при выборе индекса следующей страницы. Я всегда получаю старое значение, а не последнее выбранное значение страницы. Я даже использовал ViewBag вместо tempData, но не имел успеха.
View Code:
@model IEnumerable<UrCompedDAL.DBModels.SlotMachineModel>
<div class="my-properties">
<table id="tbl_slots" class="table no-margin" data-search="true" data-pagination="false">
<tbody class="orgTbody">
@foreach (var item in Model)
{
<tr>
//Code for Slot list
</tr>
}
</tbody>
</table>
<ul class="paging">
@{
int i = 1;
int pg = Convert.ToInt32(TempData["Current"]);
if (i > 0 || i == ViewBag.PageSize)
{
<li>
<a href="#" class="lipaging"><<</a>
</li>
}
if (pg < 6)
{
for (i = 1; i < 11; i++)
{
<li>
<a href="#" class="lipaging">@i</a>
</li>
}
}
else
{
for (i = pg - 4; i < pg; i++)
{
<li>
<a href="#" class="lipaging">@i</a>
</li>
}
for (i = pg; i < pg + 6; i++)
{
<li>
<a href="#" class="lipaging">@i</a>
</li>
}
}
if (i > 1 || i < ViewBag.PageSize)
{
<li>
<a href="#" class="lipaging">>></a>
</li>
}
}
</ul>
</div>
<script>
$(document).ready(function() {
$('.lipaging').click(function() {
$("#loadingDiv").show();
$(this).addClass('active');
var pageThis = $(this).text();
var current = @TempData["Current"];
if (pageThis == '>>') {
pageThis = current +1;
}
if (pageThis == '<<') {
pageThis = current -1;
}
$.ajax({
type: 'get',
url: '@Url.Action("Index", "Game_SlotMachine")',
data: {
CurrentPage: pageThis
}
}).done(function (data) {
var startIndex = data.indexOf("<tbody");
var endIndex = data.indexOf("</tbody>");
var html = data.substring(startIndex, endIndex + 8);
$('#tbl_slots').html('');
$('#tbl_slots').html(html);
setTimeout(function() {
filter();
}, 300);
$("#loadingDiv").hide();
});
});
Controller Код:
public ActionResult Index(int id = 0, int CurrentPage = 1)
{
List<SlotMachineModel> slotmodel = new List<SlotMachineModel>();
slotmodel = UrCompedDAL.DataAccessor.Instance.GameAccessor.GetAllSlotMachines().ToList();
ViewBag.PageSize = slotmodel.Count/10;
TempData["Current"] = CurrentPage;
slotmodel = slotmodel.Skip((CurrentPage - 1) * 10).Take(10).ToList();
return View(slotmodel);
}
Пожалуйста, помогите.
Пожалуйста, прочтите http://stackoverflow.com/help/mcve - «Как создать Minimal, полный , и Подтверждаемый пример ". Это всего лишь свалка кода, и вы ожидаете, что мы в нее заработаем. –
@PeterB Все имеет отношение к проблеме, поэтому опубликовано. Я делаю клиентскую подкачку, поэтому мне нужен способ хранения значений в чем-либо, кроме Model, например ViewBag, который остается постоянным. –