我有一个Ajax按钮,只要单击它,它就会显示数据库中的一条记录(在我的Controller中,我使用.Take(1))
这是我的观点:
<script src="~/Scripts/jquery-3.1.1.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script type="text/javascript" language="javascript">
function ClearResults() {
$("#current").empty();
}
</script>
<div class="row">
<div class="column">
<h2 class="header-text">CURRENT</h2>
<div class="current" id="current">
X000
</div>
</div>
</div>
<div class="row">
@Ajax.ActionLink(" ", "BtnNext", null, new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "current",
LoadingElementId = "loading",
OnBegin = "ClearResults",
}, new { @class = "Middle-next dim btn btn-large-dim", @id = "Link1"})
</div>
这是该按钮的控制器:
public PartialViewResult BtnNext(int count = 0)
{
System.Threading.Thread.Sleep(1000);
var model = db.Queues.OrderBy(x => x.QueueNumber).Take(1);
return PartialView("_queuenumber", model);
}
我想在这里做的是-每当我单击下一步按钮时,它将显示数据库中的第一条记录,然后再次单击它时,它将显示第二条记录,依此类推。 (到目前为止,它仅显示数据库中的第一个数据)
我想知道这是否有可能,我应该使用什么样的东西呢?
答案 0 :(得分:1)
您将要跟踪当前索引客户端(JavaScript)或模型(Razor)中的索引,然后将其传递到控制器方法中,并在每次调用时递增该值。从服务器端,您将执行以下操作:
var model = db.Queues.OrderBy(x => x.QueueNumber).Skip(index).Take(1);
我建议发送回ViewModel。对于Razor实现,您可以具有一个ViewModel,其中包含显示的值,队列ID和索引。即
public class QueueViewModel
{
public int QueueId { get; set; }
public int QueueNumber { get; set; }
public string Name { get; set; }
// ..
public int NextIndex { get; set; }
}
public PartialViewResult BtnNext(int index = 0)
{
var model = db.Queues.OrderBy(x => x.QueueNumber)
.Select(x => new QueueViewModel
{
QueueId = x.QueueId,
QueueNumber = x.QueueNumber,
Name = x.Name,
NextIndex = index + 1
})
.Skip(index).Take(1);
return PartialView("_queuenumber", model);
}
然后视图中的内容将如下所示:(对不起,我的剃刀非常生锈)
@Ajax.ActionLink(" ", "BtnNext", "QueueController",
new { index = Model.nextIndex },
new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "current",
LoadingElementId = "loading",
OnBegin = "ClearResults",
}, new { @class = "Middle-next dim btn btn-large-dim", @id = "Link1"})
这需要对行为进行一些验证,以确保第一个调用的索引值为“ 0”,但是希望可以为您提供一些思路。