在javascript计时器完成后调用服务器端sub

时间:2013-11-15 03:44:41

标签: c# javascript asp.net vb.net timer

在线考试中的倒数计时器是使用JavaScript实现的。如果倒计时达到0:0:00,它会提醒用户并进入下一个网页(如下所示):

function myTimer(startVal,interval,outputId, dataField){
...
var current = this.value;
    this.OutputCntrl.innerHTML = this.Hours(current) + ':' + this.Minutes(current) + ':' +  this.Seconds(current);
    this.currentTimeOut = setTimeout("Timer.go()", this.interval);
                     }
    else             {
    window.alert("Time is up! Exam will proceed to next module.");
    window.location = "Conf_English.aspx"
                                  }

如果还剩下一些时间,选项会显示在网络表单中(如下所示): enter image description here

单击“继续按钮”时,受检者的问题和答案(临时存储在数据表中)将存储在数据库中。

这里的问题是倒计时器由客户端脚本运行,数据插入在服务器端编码。我也不能制作一个将插入数据的javascript函数,因为基于我在一些文章中读到的内容,不建议通过客户端脚本访问数据库,我认为这是基于ASP.Net的概念。有人可以提出一个很好的方法吗?感谢。

1 个答案:

答案 0 :(得分:1)

使用ASP.NET AJAX页面方法在Web服务器上调用static(VB.NET中的Shared)方法,如下所示:

标记:

// jQuery DOM ready function
$(document).ready(function() {
    // Wire up click event handler for proceed button
    $('.Proceed').click(function() {
        $.ajax({
            type: "POST",
            url: "PageName.aspx/SaveToDatabase",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                // Navigate to next page or whatever needs to happen here
            }
        });

        // Stop button from trying to post back to server
        return false;
    });
});

<asp:Button id="ButtonProceed" runat="server" Text="Proceed" CssClass="Proceed" />

注意:您可以通过data: "{}",内的名称/值对将数据传递给ASP.NET AJAX页面方法,也可以构建JavaScript文字,然后使用JSON.stringify()将文字转换为JSON。

代码隐藏:

[WebMethod]
public static string SaveToDatabase()
{
    // Save to database logic here
}