【发布时间】:2015-04-21 05:25:21
【问题描述】:
我需要根据已完成的作业数量来更新进度条。完成的作业数存储在 SQL Server DB 的作业表中。我需要我的 ASP.NET MVC 4 应用程序每 3 秒查询一次数据库,以了解竞争的作业数量,并使用此数据更新部分视图中的进度条。计时器工作,它调用我在StatusController 中的_getforStatus 操作,它似乎调用了EntityDB,但似乎从来没有在定时器告诉它之前调用视图。如何让进度条每 3 秒刷新一次?
我的 _Layout.cshtml 视图的标题调用了 StatusController 中的计时器的启动,如下所示:
<head>
...
@Html.Action("InitTimer", 'Status")
...
</head>
另外,在 _Layout 视图中,我将部分视图称为 Jumbotron,如下所示:
<div class="jumbotron" id=progress">
@{Html.RenderAction("_GetforStatus", "Status");}
</div>
Status 控制器的编码如下:
public class StatusController : Controller
{
IntegrationDBEntities _db;
Private Timer timer1;
Public void initTimer()
{
timer1 = new Timer();
timer1.elapsed += new ElapsedEventhandler(timer_Elapsed(;
timer1.interval = 3000;
timer1.Start();
}
Private void timer_Elapsed(Object sender, EventArgs e)
{
_GetforStatus();
}
[ChildActiononly]
public PartialViewResult _GetforStatus(0
{
_db = new IntegrationDBEntities();
ViewDataModel - _db.Jobs.ToList();
return partialView();
}
编辑: 我还尝试了以下 Ajax 代码。我没有收到任何错误,但我的进度条从未更新:
<script>
function loadPartialView() {
$.ajax({
url: '@url.Action("_GetforStatus', "Status")",
type: 'GET',
dataType: 'html',
success: function(result) {
$('progress').html(result);
}
});
}
$function () {
loadPartialView();
window.setInterval("loadPartialView()", 3000);
});
</script>
我不确定它是否不起作用,因为我没有在 JS 中正确表示“Html.RenderAction”或什么。
【问题讨论】:
-
对于这样的事情,我更喜欢在视图sitepoint.com/settimeout-example 上使用 jquery 计时器。在计时器中执行 ajax 调用以返回部分或仅返回更新进度条所需的数据
-
我尝试关注另一个问题,该问题为类似问题提供了 Ajax 解决方案,但我无法让它工作。您能否使用上面的代码向我展示一个示例,说明我将如何使用 razor 语法来实现这一点?
-
您能否发布您尝试使用 ajax 调用的内容并告诉我您遇到了什么错误?
-
看起来好像它没有调用脚本。我是否必须在头脑中编写任何代码才能读取它?
标签: asp.net-mvc-4 timer progress-bar entity-framework-6 asp.net-mvc-partialview