如何将进度传递到MVC页面

3
我有一个委托方法,当WritingAnObject上传文件时会调用它。我想使用args.PercentDone值更新MVC页面中的div(ProgressUpdate)。请提供任何建议?
谢谢,
private void displayProgress(object sender, ProgressArgs args)
{
            //Console.WriteLine(args.PercentDone); //I want to display args.PercentDone in the page
}

//控制器

[HttpPost]
public ActionResult WritingAnObject(MyViewModel bovModel)
{
    //DoSomeStuff which is cause calling displayProgress

    return RedirectToAction("ListingSomeInfo", "testpart");
}

//视图

<%using (Html.BeginForm("WritingAnObject", "testpart", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {%>   

    <%:Html.TextBox("catname") %>
    <input type="file" id="fileupload" name="fileupload" />
    <input type="submit" value="Upload" />
    <%} %>


<div id= “ProgressUpdate”</div>

你需要的是异步文件上传,一般来说需要使用HTML5或者Flash。在这里搜索“HTML上传进度”,你会发现第一个结果是这个非常高评价的帖子,讨论了使用HTML5的选项 - https://dev59.com/vXVC5IYBdhLWcg3w1E_w#8758614 - Snixtor
1个回答

0

下面是一种方法,可以在服务器执行操作时向用户显示进度。 (需要 javascript)

1) 编写一个启动服务器处理的操作。 这个方法应该更新会话状态中的进度值 (以便它对每个用户会话都是特定的)。

2) 编写一个客户端可以调用以返回进度的操作。这将读取会话状态中的值。通常,此操作将返回包含正确填充进度条的小 HTML 片段,或者包含进度值的 JSON 对象。

3) 从客户端,使用 jQuery.ajax() 调用异步轮询服务器以获取进度,同时更新 UI。

其他额外的特性: - 取消长时间运行操作的操作 - 在 Web 应用程序之外运行任务 (Azure 具有一些优秀的功能,可以异步地从 web 应用程序中运行任务) - 让返回进度的操作也让客户端知道操作是否已完成或已取消。


这些选项适用于许多长时间运行的异步操作,但是HTML4文件控件不是异步的。异步HTML文件上传需要额外的一点东西。 - Snixtor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接