我的长期任务有问题

时间:2018-03-16 21:13:23

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

我有一个asp.net网络应用程序,但我无法浏览它,而我在后台的过程完成它正在做的事情,这是从存储过程获取数据(大约需要约20秒)。这个动作给了我一个Json字符串作为回报。一旦完成,我就可以正常导航。但是,我的问题是:在我的主要操作完成时,我需要做些什么来保持我的网站响应?

我的主网站在Index.cshtml中设置表单的方式,一旦页面加载我做了一个"强制提交"为了打电话给我的行动。

@model Foo.Models.HomeViewModel
@{
  ViewBag.Title = "Home";
}
<div class="d-flex align-items-stretch">
  <div class="page-content">
    @using (Ajax.BeginForm("GetData", null,
new AjaxOptions
{
  HttpMethod = "post",
  InsertionMode = InsertionMode.Replace
}, new { id = "MyForm" })){
<div id="status-container" class="col-lg-3 d-flex align-items-center">
            <div id="red-count" class="status-box" style="background-color:#red">---</div>
<!-- More elements like these below --!>
}
  </div>
</div>

<script>
$.ajax({
      url: '../Home/GetData',
      type: "POST",
      dataType: "json",
      contentType: "application/json; charset=utf-8",
      contentType: false,
      processData: false,
      success: function (data) {
        //give me my data
      }
    });
</script>

控制器:

using CVDashboard.Models;
using CVDashboard.Services;
using System.Linq;
using System.Threading;
using System.Web.Mvc;
using System.Windows.Forms;

namespace CVDashboard.Controllers
{
  [Route("Home")]
  [Route("Home/Index")]
  public class HomeController : Controller
    {
    FooServices Service = new FooServices();
    HomeViewModel model = new HomeViewModel();

    public ActionResult Index()
        {
      return View();
    }

    [HttpPost]
    public JsonResult GetData()
    {
      model.FooCollection = Service.GetViewData(); //my stored procedure

      return Json(new { result = model.FooCollection }, JsonRequestBehavior.AllowGet);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

所以你可以做的是优化你的sps和代码来perorm第二种方法而不是通过ajax加载它带来数据与视图渲染功能的例子

现在你应该创建一个新的viewmodel然后移动但是为了解释我使用viewbag它不是一个好习惯但是

public ActionResult YourAction()
{
ViewBag.TheJsonWhichIsTakingTime = YourBLL.Action();
return view(model);
}

现在在视图部分

@section scripts
{

$(function(){
var jsonData = @Html.Raw(Json.Encode(ViewBag.TheJsonWhichIsTakingTime));
YourVewRelatedFunction(jsonData);
})

    function YourVewRelatedFunction(data)
    {
    //The Code block you used in success function of ajax
    }

}