如何从控制器创建进度条来处理MVC3中的长流程
How to create a Progress Bar from Controller to handle long process in MVC3
我有一个使用RAZOR视图的vb.net MVC3应用程序。有些函数需要很长时间才能完成,因为它们是从数据库中编译数据的。在这漫长的等待过程中,浏览器屏幕是白色的,除了活动环之外,没有任何迹象表明它在做它应该做的事情。我想做的是创建一个进度条,使用一些简单的计数方法来确定进度条的完成百分比,并将其显示在屏幕上,而不是纯白色的浏览器屏幕上。。我确信我需要用某种Jquery小部件来做这件事。我已经在谷歌上找了很多,但似乎没有什么能满足我的需求。。当显示白色屏幕直到完成时调用的控制器功能如下:
Function beginArchive()
Dim cList As List(Of cours) = db.courses.ToList
For Each x In cList
Dim indCourse = x
Dim courHfile As String = archiveFiles(x.course_id)
Dim arcCourse As New archive
arcCourse.cDesc = indCourse.course_description
If Not String.IsNullOrEmpty(courHfile) Then
arcCourse.cHandouts = courHfile
End If
arcCourse.cHours = indCourse.course_hours
arcCourse.conNum = Convert.ToInt16(indCourse.courseNum)
arcCourse.cPre = indCourse.course_prefix
arcCourse.cRef = indCourse.course_ref
arcCourse.cSpeaker = indCourse.course_speaker
arcCourse.cTitle = indCourse.course_title
db.archives.AddObject(arcCourse)
db.SaveChanges()
Dim testSuccess As Integer = delOldFiles(indCourse.course_id)
Next
Return RedirectToAction("Index", "Admin")
End Function
Razor视图是这样的:
@Code
ViewData("Title") = "Archive Previous Conf. Handouts"
End Code
<fieldset>
<h2>You are about to archive all handouts from last years conference. If you continue all of those handouts will be moved to the archive</h2>
<div id="sidebar3">
<p>
@Html.ActionLink("Begin Archive", "beginArchive","handoutArchive")
@Html.ActionLink("Back to Admin Tools", "Index", "Admin")
</p>
</div>
</fieldset>
关于我将如何在其中添加一个简单的进度条的任何想法,我认为它必须由控制器本身启动。。。
您的页面/操作的当前设计无法实现您的基本要求。您正在单击一个向控制器发出请求的链接。控制器将等待操作完成,然后再渲染并返回响应。这与进行ajax调用不同,后者会将数据返回到当前页面,而不是将您引导到新的url。有很多方法可以做到这一点,其中很多都取决于您对其工作方式的要求。
如果是我,我正试图做一个大手术,这就是我会做的。显示一个微调器或某种图标,并显示一条消息"这可能需要一段时间",然后向您的操作发出ajax请求。当操作返回时,您可以显示消息或重定向到新路由。
使用jquery 的示例
$.post('beingArchive/2012', function(data) {
if(data.status === "success"){
window.location.replace("/success");
}else{
$("#error-div").html("<em>Something went wrong!</em>");
}
});
这假设beginArchive
方法返回类似于{"status":"success"}
或{"status":"error archiving reason blah"}
的json
[HttpPost]
Public Function beginArchive() As JsonResult
Dim status = "success"
Try
'do the archiving
Catch e As Exception
status = "error occurred"
End Try
Return New Json(New With { _
Key .status = status _
})
End Function
(我是一个c族,所以如果vb.net不正确,我很抱歉,这只是我设想如何实现该操作的一个例子)。不幸的是,如果我不了解"归档讲义"的实施方式,我真的无法告诉你一个显示操作进度的好解决方案。但我觉得这是许多应用程序在处理密集型操作时使用的标准解决方案。
您的html代码最好在这里看到,以获得更好的响应,但您可以很容易地在ajax.beginfo中运行流程,并使用begin表单的onbegin/oncomplete参数来调用startProgressbar/stopProgressbar方法。只需在div中有一个动画gif,并使上面的两个方法为该div进行显示/隐藏。
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- python到“;流“;字典处理
- 使用javascript进行实时图像处理
- 导入jQuery脚本获胜'我不处理html文件
- 如何从控制器创建进度条来处理MVC3中的长流程
- 如何让 PrettyPhoto 与 MVC3 内容处理程序一起工作
- 如何在ASP中处理JavaScript.. NET MVC3当我点击删除按钮