AJAX并不总是调用控制器操作,但始终处理成功

时间:2017-04-11 18:01:51

标签: jquery ajax asp.net-mvc

好吧,我遇到了一些我以前从未见过的麻烦,它实际上并不可重现。我有一个文本框,它接受一个数字,然后按下按钮时执行ajax调用。这会在我的控制器中调用一个操作,然后使用文本框中的值更新数据库。问题是,虽然调试有时它可以工作,但有时它没有。您可以在控制器中的操作中放置一个断点,并且它不会被命中,但即使没有调用该操作,仍然会执行来自ajax的成功调用。通常它在调试器启动后的前几次工作但然后停止,如果刷新页面则无关紧要。我在Chrome或Visual Studios中看不到任何错误。我也试着看看我是否能在Intellitrace中找到一些东西,但没有运气。

这是我的行动:

[HttpPost]
public JsonResult UpdateIncremental(int QueryID, int? Incremental)
{
    Datamart_MedsDBContext DBContext = new Datamart_MedsDBContext();
    ss_Queries query = DBContext.ss_Queries.FirstOrDefault(m => m.QueryID == QueryID);
    query.IncrementalLookBack = Incremental;
    query.UpdatedBy = "CHMCCORP\\" + Session["UserName"].ToString();
    query.UpdatedOn = System.DateTime.Now;
    DBContext.ss_Queries.Attach(query);
    DBContext.Entry(query).State = System.Data.Entity.EntityState.Modified;
    DBContext.SaveChanges();
    return Json(true, JsonRequestBehavior.AllowGet);
}

查看:

<input type="text" id="Incremental" value="@ViewBag.Incremental" />
<input id="editIncremental" type="button" name="editIncremental" value="Update" />

的Ajax:

$("#editIncremental").on("click", function () {
    var reg = /(^$)|(^[0-9]*$)/;
    var incremental = $('#Incremental').val();
    var valid = reg.test(incremental);
    var queryID = "@Session["QueryID"]";
    if (!valid) {
        alert("The incremental load must be a number!");
    } else {
        $.ajax({
        type: "POST",
        url: '@Url.Action("UpdateIncremental", "Home")',
        data: {
                QueryID: queryID, Incremental: incremental
        },
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
                if (data == true) {
                    alert('Incremental Lookback has been updated!')
                    //window.location.reload();
                }
                else {
                    alert('There is some error');
                }
            }

        });
    }
});

我知道这会很痛苦,因为它不可重复且无法保证。我只想找到正确方向的一点。

1 个答案:

答案 0 :(得分:2)

如果您在IE中工作,请关闭缓存。 Chrome似乎不需要它。

    $.ajax({
        cache:false,