【问题标题】:Asp.net MVC with Ajax button to retrieve data from database带有 Ajax 按钮的 Asp.net MVC 从数据库中检索数据
【发布时间】:2019-03-20 03:48:49
【问题描述】:

我有一个 Ajax 按钮,每当我单击它时,它都会显示数据库中的一条记录(在我使用的控制器中 .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);
    }

我想在这里做的是 - 每当我单击下一个按钮时,它将显示数据库中的第一条记录,然后当我再次单击它时,它将显示第二条记录,依此类推..
(目前只显示数据库中的第一个数据)

我想知道这是否可能,我应该使用什么样的东西来做到这一点?

【问题讨论】:

    标签: javascript asp.net-mvc entity-framework asp.net-ajax


    【解决方案1】:

    您将要在客户端 (JavaScript) 或模型 (Razor) 中跟踪当前索引,然后将其传递给您的控制器方法,每次调用都会增加值。在服务器端,您可以执行以下操作:

    var model = db.Queues.OrderBy(x => x.QueueNumber).Skip(index).Take(1);
    

    我建议发回一个 ViewModel。对于 Razor 实现,您可以拥有一个包含显示值、队列 ID 和索引的 ViewModel。即

    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”的索引值通过,但希望能给你一些想法。

    【讨论】:

    • 我想知道为什么 NextIndex = index + 1 不起作用?和.Skip(index).Take(1);
    • 如果您的方法签名仍然将“count”作为参数名称,我会将其重新标记为“index”,因为它更能描述值是什么。
    • 它说对象引用未设置为对象的实例。
    • 您可以粘贴更新后的代码吗? null ref 异常对于将视图模型属性分配给整数没有任何意义。
    • 我的系统此时的数据库中已经有一个 QueueNumber,我需要得到它并以 1 by 1 的形式显示给视图
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多