.Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能

.Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能

我的项目需求是:在.net4.5中用mvc5实现上传xml文件,后台实时导入数据库时传到前台进度,进度条实现动态在走。

网上看了很多实现此需求的方法(服务器轮训向客户端发送消息)ajax、webscoket、singal等。

之前的代码是前段用定时器ajax去访问后台的进度数据。然后给进度条赋值。发现有时候ajax请求总出现pending的状态。

之前的缓存实现代码:

var cc=true;

window.setTimeout(function () {
$.ajax({
url: "/Import/GetImportRate",
dataType: "json",
type: "post",
async: true,
success: function (data) {
if (data == null || data.rate == null) {

}
else if (data.rate != "100" || data.rate != 100) {

$(‘#p‘).progressbar(‘setValue‘, parseInt(data.rate));
$("#ppp").text("正在导入--" + data.currentname);
}
else {
}
}
});
if (cc) {
setTimeout(arguments.callee, 2000);
}
}, 2000);

 public JsonResult GetImportRate()
        {
            var rate = HttpRuntime.Cache.Get("Progress");
            var cutname = HttpRuntime.Cache.Get("CurrentName");
            if (rate == null)
            {
                rate = "0";
            }
            if (cutname == null)
            {
                cutname = "";
            }
            return Json(new
            {
                rate = rate,
                currentname = cutname,
            });
        }

将数据保存在Cache中,每次ajax获取数据。

下面使用singal:

1.首先需要在setup中注册singalr

2.创建一个Hubs文件夹,其中创建ChatHub类,继承Hub

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addNewMessageToPage(name, message);
        }
    }
}

3.前段代码:

在需要用到的页面引用js

<script src="~/Scripts/jquery.signalR-2.0.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
<!--SignalR script to update the chat page and send messages.-->

然后js代码

    $(function () {
            var chat = $.connection.chatHub;
            chat.client.addNewMessageToPage = function (name, message) {
               //此方法对应着ChatHub类中的send方法,在此处理服务器
//传到客户端的信息。
            };
            $.connection.hub.start().done(function () {
                });

        });

4.在其他的Controller中使用Send方法去实现服务器消息传到客户端。

var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();

context.Clients.All.addNewMessageToPage(name, message);

5.我项目中最后实现的实时显示进度条进度和相关代码:

 1  var chat = $.connection.chatHub;
 2         chat.client.addNewMessageToPage = function (name, rate) {
 3             if (rate != "100" || rate != 100) {
 4                 $(‘#p‘).progressbar(‘setValue‘, parseInt(rate));
 5                 $("#ppp").text("正在导入--" + name);
 6             }
 7         };
 8         $.connection.hub.start().done(function () { });
 9
10
11         $("#btnSave").click(function () {
12             if (filenamelist == "" || filenamelist == null) {
13                 return;
14             }
15             else {
16                 $.ajax({
17                     url: "/Import/ImportSingleFiles?allfilename=" + escape(filenamelist),
18                     dataType: "json",
19                     type: "post",
20                     success: function (data) {
21
22                         if (data.result == true) {
23                             parent.layer.msg("全部导入成功!");
24
25                             $(‘#p‘).progressbar(‘setValue‘, parseInt(100));
26
27                         }
28                         else {
29                             parent.layer.msg("导入出错!请从新选择文件!");
30                             $("#ppp").text("导入出错!请从新选择文件!");
31                             $("#ppp").css("color", "red");
32                             $("#tip").hide();
33                             alert(data.message);
34
35                             $("#btnBack").show();
36                         }
37                     }
38                 })
39             }
40         });

6.实现结果

原文地址:https://www.cnblogs.com/melodygkx/p/11498489.html

时间: 2024-10-12 02:37:37

.Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能的相关文章

Asp.Net 无刷新文件上传并显示进度条的实现方法及思路

相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认"拿来主义",只是我个人更喜欢凡是求个所以然.本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助. 效果图: 本文涉及到的知识点:1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序(IHttpHandler)和

ASP.NET技巧:教你制做Web实时进度条

网上已经有很多Web进度条的例子,但是很多都是估算时间,不能正真反应任务的真实进度.我自己结合多线程和ShowModalDialog制做了 一个实时进度条,原理很简单:使用线程开始长时间的任务,定义一个Session,当任务进行到不同的阶段改变Session的值,线程开始的同时使用 ShowModalDialog打开一个进度条窗口,不断刷新这个窗口获取Session值,反应出实时的进度.下面就来看看具体的代码:(文章结尾处下 载源代码) 先新建一个Default.aspx页面,客户端代码: <b

Extjs+Asp.net实现上传大文件带实时进度条

主要是为了记录自己的学习过程,整理自己的思路以便以后的学习. 首先先说一下整体的思路. 我门都知道,asp自带的上传文件是先将上传的文件整个读取到内存然后在写入磁盘的.如果文件很大的话,上传时就会出现页面停滞,没有任何反映.用户根本不知道页面在做什么,也不知道是否在上传,上传了多少?这样的用户体验是很差的. 所以我门需要实现一个进度条来反映文件上传的进度,可以反映文件写入的进度.具体的思路是通过asp.net提供的HttpModule(Http模块)中的init方法内订阅各种应用程序事件(如Be

ASP.NET MVC计划任务实现方法(定时执行某个功能)

系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在Application_Start方法最下面加入: //定义定时器 //1000表示1秒的意思 System.Timers.Timer myTimer = new System.Timers.Timer(1000); //TaskAction.SetContent 表示要调用的方法 myTimer.

ASP.NET MVC - 路由系统

ASP.NET MVC的请求URL不再对应于传统ASP.NET程序的ASPX文件物理地址,而是把请求映射到一个控制器(Controller)类的方法(Action)上,Controller.Action再加上参数构成ASP.Net MVC请求的Url.下面我们来看下路由系统的主要对象. UrlRoutingModule ASP.NET MVC框架的路由实质是从传统ASP.NET管道扩展HttpModule而来,这个模块正是UrlRoutingModule.通过反编译可以看到UrlRoutingM

ASP.NET MVC学习之路由篇(2)

7.解决与物理路径的冲突 当发送一个请求至ASP.NET MVC时,其实会检查网站中存不存在这个请求的物理路径文件,如果存在的话,就会直接将这个物理文件返回.但是有时候我们需要它执行控制器的某个方法,而不是直接将这个物理文件返回.那么我们就需要这节知识.下面我们先在网站根目录中新建一个 Test.html ,在其中随便写上一些内容,然后访问.再在RouteConfig.cs中写入如下代码: 1 public class RouteConfig 2 { 3 public static void R

Action Filters for ASP.NET MVC

本文主要介绍ASP.NET MVC中的Action Filters,并通过举例来呈现其实际应用. Action Filters 可以作为一个应用,作用到controller action (或整个controller action中),以改变action的行为. ASP.NET MVC Framework支持四种不同类型的Filter: Authorization filters – 实现IAuthorizationFilter接口的属性. Action filters – 实现IActionF

asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间

如何在asp.net mvc 项目里, 调用微信jssdk接口,现实功能: 分享到微信朋友(圈)| 分享到qq空间 1 创建一个Action,准备一些数据,初始化数据(签名): /// <summary> /// 分享的内容 /// 必须写在html的head里面才可以生效 /// </summary> /// <param name="fxUrl"></param> /// <returns></returns>

ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)

原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处理一些逻辑.为了支持这个.ASP.NET MVC同意你创建action过滤器.Action过滤器是自己定义的Attributes.用来标记加入Action方法之前或者Action方法之后的行为到控制器类中的Action方法中. 一些可能用到Action过滤器的地方有: 日志,异常处理 身份验证和授权