我有一个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);
}
}
}
答案 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
}
}