从ActionMethod返回响应后,在控制器中调用函数

时间:2018-10-22 05:26:25

标签: c# .net ajax asp.net-mvc-3

我正在做一个Ajax调用,它调用如下的操作方法-

动作方法完成一些工作后会返回响应。
一旦此响应提交回Ajax调用,我想调用另一个方法。

 $.ajax({
        url: "/Test/TestActionMethod"; ,
        data: somejsondata,
        dataType: "json",
        type: 'POST',
        async: true,
        contentType: 'application/json; charset=utf-8',
        success: function (response) {

        }
});

这是我的actionMethod

public JsonResult TestActionMethod(bool test1, bool test2)
{  
      object response = null;
      // some code

      return Json(response, JsonRequestBehavior.AllowGet);

      Save(); // Here I want to call this method
}

我知道我不能像这样调用Save()方法,我也知道我们可以进行另一个ajax调用来调用此save方法,但是,我正在寻找可以在控制器本身中调用此save方法的方式而不是再次调用Ajax。

有什么办法吗?

[P.S。我不想在提交响应之前调用此函数,因为此函数需要时间,因此响应时间也会增加]

2 个答案:

答案 0 :(得分:1)

请放火,在返回之前使用Task.Run()忘记。

public async Task<IActionResult> ActionName()
{
    Task.Run(() => Save());
    return Ok();
}

private void Save()
{
    Thread.Sleep(5000);
}

答案 1 :(得分:0)

从Controller Action方法返回后,您将无法执行代码。

您可以使用后台工作程序异步触发计时功能。

//Save method which will be taking time.
private void Save(CancellationToken ct)
{
    if (ct.IsCancellationRequested)
            return;

    // Long running code of saving data.. 
}


public JsonResult TestActionMethod(bool test1, bool test2)
{  
    object response = null;
    // some code

    // Initiating background work item to execute Save method.
    HostingEnvironment.QueueBackgroundWorkItem(ct => Save(ct));

    return Json(response, JsonRequestBehavior.AllowGet);
}