Хорошей практикой, когда вы понимаете, что вашим представлениям необходимо обрабатывать и манипулировать вашими данными, является создание класса ViewModel
, который охватывает все объекты, которые вам нужно отправить в это представление.В вашем случае вы можете начать с простого
public class QueueViewModel
{
public Queue Queue { get; set ; }
public int CurrentRecord { get; set ; }
}
Теперь все, что вам нужно сделать, это изменить метод действия контроллера, чтобы вы инициализировали и передали ViewModel в View.Также будет лучше иметь необязательный аргумент, действующий в качестве записи по умолчанию, а затем использовать команду linq Skip
для перехода к конкретной записи:
Public PartialViewResult NextRecord(int current = 0)
{
QueueViewModel model = new QueueViewModel();
model.CurrentRecord = current;
model.Queue = db.OrderBy(x => yourClause).Skip(current).Take(1);
return PartialView(“yourview”, model);
}
Я изменил List<Queue>
в пределахваша модель, как мне кажется, вам не нужен список, если вы показываете только одну запись за раз, но вы можете легко вернуться к дженерикам, если вы чувствуете, что вам действительно нужно.
Что касаетсяПосмотрите часть, где вы обрабатываете индекс модели, есть много способов достичь того же результата.Лично мне нравится использовать модель для заполнения атрибута data
элемента DOM и использовать его в вызове Ajax.Поскольку теперь у вас есть
@model yourModelNamespace.QueueViewModel
, вы можете установить элемент (скажем, кнопку) для размещения значения current
:
<button data-current-record=“@Model.CurrentRecord”>...</button>
Теперь вы можете очень легкополучить это значение в вашем Ajax-вызове для метода действия:
var currentRecord = parseInt($(‘button’).data()[currentRecord]);
$.ajax({
url: yourPathToTheAction,
type: ‘GET’,
data: {
current: currentRecord + 1
}
});
Таким образом, вы можете пойти дальше и добавить другие функции, вызывающие тот же контроллер, чтобы перейти к предыдущей записи или перейти к последней или первой и т. д.на ...