1. 程式人生 > >Asp.NET MVC 使用 SignalR 實現推送功能二(Hubs 線上聊天室 獲取儲存使用者資訊)

Asp.NET MVC 使用 SignalR 實現推送功能二(Hubs 線上聊天室 獲取儲存使用者資訊)

簡單介紹

在上一篇中,我們只是介紹了簡單的訊息推送,今天我們來修改一下,實現儲存訊息,歷史訊息和使用者線上

使用者登入註冊資訊

當用戶登入之後,我們註冊一下使用者的資訊,我們在ChatHub中 新建一個方法 Register(使用者帳號,使用者密碼)

前臺js呼叫這個方法實現使用者註冊 

1 $.connection.hub.start().done(function () {            
2             chat.server.register('使用者帳號', '使用者密碼');           
3         });

 Register方法的實現:

 1 /// <summary>
 2         /// 使用者登入註冊資訊
 3         /// </summary>
 4         /// <param name="id"></param>
 5         public void Register(string account,string password)
 6         {
 7             try
 8             {
 9                 //獲取使用者資訊
10                 var User = UserManage.Get(p => p.ACCOUNT == account);
11 if (User != null && User.PASSWORD == password) 12 { 13 //更新線上狀態 14 var UserOnline = UserOnlineManage.LoadListAll(p => p.FK_UserId == User.ID).FirstOrDefault(); 15 UserOnline.ConnectId = Context.ConnectionId;
16 UserOnline.OnlineDate = DateTime.Now; 17 UserOnline.IsOnline = true; 18 UserOnline.UserIP = Utils.GetIP(); 19 UserOnlineManage.Update(UserOnline); 20 21 22 //超級管理員 23 if (User.ID == ClsDic.DicRole["超級管理員"]) 24 { 25 //通知使用者上線 26 Clients.All.UserLoginNotice("超級管理員:" + User.NAME + " 上線了!"); 27 28 } 29 else 30 { 31 //獲取使用者一級部門資訊 32 var Depart = GetUserDepart(User.DPTID); 33 if (Depart != null && !string.IsNullOrEmpty(Depart.ID)) 34 { 35 //新增使用者到部門群組 Groups.Add(使用者連線ID,群組) 36 Groups.Add(Context.ConnectionId, Depart.ID); 37 //通知使用者上線 38 Clients.All.UserLoginNotice(Depart.NAME + " - " + CodeManage.Get(m => m.CODEVALUE == User.LEVELS && m.CODETYPE == "ZW").NAMETEXT + "" + User.NAME + " 上線了!"); 39 40 41 } 42 } 43 //重新整理使用者通訊錄 44 Clients.All.ContactsNotice(JsonConverter.Serialize(UserOnline)); 45 } 46 } 47 catch(Exception ex) 48 { 49 Clients.Client(Context.ConnectionId).UserLoginNotice("出錯了:" + ex.Message); 50 throw ex.InnerException; 51 } 52 53 }

 使用者上線通知,大家可以在對話方塊內已係統訊息的方式提示,我這裡是一個toastr外掛的提示

1 //使用者上線通知
2         chat.client.UserLoginNotice = function (message) {
3             if ($("#LoginNotice").prop("checked")) { toasSuccess.message_t(message); }
4         };

這裡面有個判斷,如果使用者允許提醒,就提示,如果不允許,就不提示,就是個checkbox

當用戶登入後,重新整理其它使用者通訊錄使用者的線上狀態,離線使用者排到底部,並且如果使用者離線,點選使用者的時候,提示使用者離線傳送郵件還是離線訊息

 1 //通訊錄使用者上下線
 2         chat.client.ContactsNotice = function (message) {
 3             var data = eval("(" + message + ")");
 4             if (!data.IsOnline) {
 5                 var current = $("#charUser-" + data.FK_UserId).addClass("offline");
 6                 var parentId = current.parent().parent().prop("id");
 7                 current.remove().appendTo($("#" + parentId + " .panel-body"));
 8             }else
 9             {
10                 var current = $("#charUser-" + data.FK_UserId).removeClass("offline").attr("data-connectid", data.ConnectId);
11                 var parentId = current.parent().parent().prop("id");
12                 current.insertBefore($("#" + parentId + " .panel-body .offline").eq(0));
13             }
14             $(".panel-body .chat-user").click(function () {
15                 if ($(this).hasClass("offline")) {
16                     var MailId = $(this).attr("data-Email");
17                     var ConnectId = $(this).attr("data-connectid");
18                     var UserName = $(this).attr("data-username");
19                     swal({ title: "使用者離線", text: "當前使用者不線上,是否傳送郵件?", type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "傳送郵件", cancelButtonText: "傳送離線訊息", closeOnConfirm: false, closeOnCancel: false }, function (isConfirm) { if (isConfirm) { sweetAlert.close(); document.getElementById(MailId).click(); } else { sweetAlert.close(); ChatPerson(ConnectId, UserName); } });
20                 }
21                 else {
22                     ChatPerson($(this).attr("data-connectid"), $(this).attr("data-username"));
23                 }
24             });
25 
26         };

線上:

離線:

使用者離線

我們重寫OnDisconnected方法,當用戶離線時,更新使用者狀態 同時重新整理其它使用者通訊錄使用者線上狀態

 1  //使用者離線
 2         public override Task OnDisconnected(bool stopCalled)
 3         {
 4             //更新線上狀態
 5             var UserOnline = UserOnlineManage.LoadListAll(p => p.ConnectId == Context.ConnectionId).FirstOrDefault();
 6             UserOnline.ConnectId = Context.ConnectionId;
 7             UserOnline.OfflineDate = DateTime.Now;
 8             UserOnline.IsOnline = false;
 9             UserOnlineManage.Update(UserOnline);
10 
11             //獲取使用者資訊
12             var User = UserManage.Get(p => p.ID == UserOnline.FK_UserId);
13 
14             Clients.All.UserLogOutNotice(User.NAME + ":離線了!");
15             //重新整理使用者通訊錄
16             Clients.All.ContactsNotice(JsonConverter.Serialize(UserOnline));
17 
18             return base.OnDisconnected(true);
19         }

前臺離線通知

1  //使用者離線通知
2         chat.client.UserLogOutNotice = function (message) {
3             if ($("#LogOutNotice").prop("checked")) { toasInfo.message_t(message); }
4         };

獲取歷史訊息

我是在使用者登入的時候獲取使用者訊息的,大家可以放到其它邏輯中

Register方法新增使用者歷史訊息

 1 /// <summary>
 2         /// 使用者登入註冊資訊
 3         /// </summary>
 4         /// <param name="id"></param>
 5         public void Register(string account,string password)
 6         {
 7             try
 8             {
 9                 //獲取使用者資訊
10                 var User = UserManage.Get(p => p.ACCOUNT == account);
11                 if (User != null && User.PASSWORD == password)
12                 {
13                     //更新線上狀態
14                     var UserOnline = UserOnlineManage.LoadListAll(p => p.FK_UserId == User.ID).FirstOrDefault();
15                     UserOnline.ConnectId = Context.ConnectionId;
16                     UserOnline.OnlineDate = DateTime.Now;
17                     UserOnline.IsOnline = true;
18                     UserOnline.UserIP = Utils.GetIP();
19                     UserOnlineManage.Update(UserOnline);
20 
21                     //獲取歷史訊息
22                     int days = Int32.Parse(System.Configuration.ConfigurationManager.AppSettings["HistoryDays"]);
23                     DateTime dtHistory = DateTime.Now.AddDays(-days);
24                     var ChatMessageList = ChatMessageManage.LoadAll(p => p.MessageDate > dtHistory);                    
25 
26                     //超級管理員
27                     if (User.ID == ClsDic.DicRole["超級管理員"])
28                     {
29                         //通知使用者上線
30                         Clients.All.UserLoginNotice("超級管理員:" + User.NAME + " 上線了!");
31 
32                         var HistoryMessage = ChatMessageList.OrderBy(p=>p.MessageDate).ToList().Select(p => new
33                         {
34                             UserName = UserManage.Get(m => m.ID == p.FromUser).NAME,
35                             UserFace = string.IsNullOrEmpty(UserManage.Get(m => m.ID == p.FromUser).FACE_IMG) ? "/Pro/Project/User_Default_Avatat?name=" + UserManage.Get(m => m.ID == p.FromUser).NAME.Substring(0, 1) : UserManage.Get(m => m.ID == p.FromUser).FACE_IMG,
36                             MessageType=GetMessageType(p.MessageType),
37                             p.FromUser,
38                             p.MessageContent,
39                             MessageDate = p.MessageDate.GetDateTimeFormats('D')[1].ToString() + " - " + p.MessageDate.ToString("HH:mm:ss"),
40                             ConnectId = UserOnlineManage.LoadListAll(m => m.SYS_USER.ID == p.FromUser).FirstOrDefault().ConnectId
41                         }).ToList();
42 
43                         //推送歷史訊息
44                         Clients.Client(Context.ConnectionId).addHistoryMessageToPage(JsonConverter.Serialize(HistoryMessage));
45                     }
46                     else
47                     {
48                         //獲取使用者一級部門資訊
49                         var Depart = GetUserDepart(User.DPTID);
50                         if (Depart != null && !string.IsNullOrEmpty(Depart.ID))
51                         {
52                             //新增使用者到部門群組 Groups.Add(使用者連線ID,群組)
53                             Groups.Add(Context.ConnectionId, Depart.ID);
54                             //通知使用者上線
55                             Clients.All.UserLoginNotice(Depart.NAME + " - " + CodeManage.Get(m => m.CODEVALUE == User.LEVELS && m.CODETYPE == "ZW").NAMETEXT + "" + User.NAME + " 上線了!");
56                             //使用者歷史訊息
57                             int typeOfpublic = Common.Enums.ClsDic.DicMessageType["廣播"];
58                             int typeOfgroup = Common.Enums.ClsDic.DicMessageType["群組"];
59                             int typeOfprivate = Common.Enums.ClsDic.DicMessageType["私聊"];
60                             var HistoryMessage = ChatMessageList.Where(p => p.MessageType == typeOfpublic || (p.MessageType == typeOfgroup && p.ToGroup == Depart.ID) || (p.MessageType == typeOfprivate && p.ToGroup == User.ID.ToString())).OrderBy(p => p.MessageDate).ToList().Select(p => new
61                             {
62                                 UserName = UserManage.Get(m => m.ID == p.FromUser).NAME,
63                                 UserFace = string.IsNullOrEmpty(UserManage.Get(m => m.ID == p.FromUser).FACE_IMG) ? "/Pro/Project/User_Default_Avatat?name=" + UserManage.Get(m => m.ID == p.FromUser).NAME.Substring(0, 1) : UserManage.Get(m => m.ID == p.FromUser).FACE_IMG,
64                                 MessageType = GetMessageType(p.MessageType),
65                                 p.FromUser,
66                                 p.MessageContent,
67                                 MessageDate = p.MessageDate.GetDateTimeFormats('D')[1].ToString() + " - " + p.MessageDate.ToString("HH:mm:ss"),
68                                 ConnectId = UserOnlineManage.LoadListAll(m => m.SYS_USER.ID == p.FromUser).FirstOrDefault().ConnectId
69                             }).ToList();
70                            
71                             //推送歷史訊息
72                             Clients.Client(Context.ConnectionId).addHistoryMessageToPage(JsonConverter.Serialize(HistoryMessage));
73 
74                         }
75                     }
76                     //重新整理使用者通訊錄
77                     Clients.All.ContactsNotice(JsonConverter.Serialize(UserOnline));                    
78                 }
79             }
80             catch(Exception ex)
81             {
82                 Clients.Client(Context.ConnectionId).UserLoginNotice("出錯了:" + ex.Message);
83                 throw ex.InnerException;
84             }
85             
86         }

前臺:

 1 //接收歷史資訊
 2         chat.client.addHistoryMessageToPage = function (message) {
 3             var data = eval("(" + message + ")");
 4             var html = '';
 5             for(var i=0;i<data.length;i++)
 6             {
 7                //處理訊息
 8             }                        
 9             $(html).appendTo(".chat-discussion");
10             $('<div class=" col-xs-12 m-t-sm m-b-sm text-center sysmessage"> — 以上是歷史訊息 — </div>').appendTo(".chat-discussion");                        
11         };

傳送廣播、組播訊息

 1 /// <summary>
 2         /// 傳送訊息(廣播、組播)
 3         /// </summary>
 4         /// <param name="message">傳送的訊息</param>
 5         /// <param name="message">傳送的群組</param>
 6         public void Send(string message,string groupId)
 7         {
 8             try 
 9             {
10                 //訊息使用者主體
11                 var UserOnline = UserOnlineManage.LoadListAll(p => p.ConnectId == Context.ConnectionId).FirstOrDefault();
12                 
13                 //廣播
14                 if(string.IsNullOrEmpty(groupId))
15                 {
16                     //儲存訊息
17                     ChatMessageManage.Save(new Domain.SYS_CHATMESSAGE() { FromUser = UserOnline.FK_UserId, MessageType = Common.Enums.ClsDic.DicMessageType["廣播"], MessageContent = message, MessageDate = DateTime.Now, MessageIP = Utils.GetIP() });
18                     //返回訊息實體
19                     var Message = new Message() { ConnectId = UserOnline.ConnectId, UserName = UserOnline.SYS_USER.NAME, UserFace = string.IsNullOrEmpty(UserOnline.SYS_USER.FACE_IMG) ? "/Pro/Project/User_Default_Avatat?name=" + UserOnline.SYS_USER.NAME.Substring(0, 1) : UserOnline.SYS_USER.FACE_IMG, MessageDate = DateTime.Now.GetDateTimeFormats('D')[1].ToString() + " - " + DateTime.Now.ToString("HH:mm:ss"), MessageContent = message, MessageType = "public", UserId = UserOnline.SYS_USER.ID };
20 
21                     //推送訊息
22                     Clients.All.addNewMessageToPage(JsonConverter.Serialize(Message));
23                 }
24                 //組播
25                 else
26                 {
27                     //儲存訊息
28                     ChatMessageManage.Save(new Domain.SYS_CHATMESSAGE() { FromUser = UserOnline.FK_UserId, MessageType = Common.Enums.ClsDic.DicMessageType["群組"], MessageContent = message, MessageDate = DateTime.Now, MessageIP = Utils.GetIP(), ToGroup = groupId });
29                     //返回訊息實體
30                     var Message = new Message() { ConnectId = UserOnline.ConnectId, UserName = UserOnline.SYS_USER.NAME, UserFace = string.IsNullOrEmpty(UserOnline.SYS_USER.FACE_IMG) ? "/Pro/Project/User_Default_Avatat?name=" + UserOnline.SYS_USER.NAME.Substring(0, 1) : UserOnline.SYS_USER.FACE_IMG, MessageDate = DateTime.Now.GetDateTimeFormats('D')[1].ToString() + " - " + DateTime.Now.ToString("HH:mm:ss"), MessageContent = message, MessageType = "group", UserId = UserOnline.SYS_USER.ID };
31 
32                     //推送訊息
33                     Clients.Group(groupId).addNewMessageToPage(JsonConverter.Serialize(Message));
34                     //如果使用者不在群組中則單獨推送訊息給使用者
35                     var Depart = GetUserDepart(UserOnline.SYS_USER.DPTID);
36                     if(Depart==null)
37                     {
38                         //推送給使用者
39                         Clients.Client(Context.ConnectionId).addNewMessageToPage(JsonConverter.Serialize(Message));
40                     }
41                     else if(Depart.ID!=groupId)
42                     {
43                         //推送給使用者
44                         Clients.Client(Context.ConnectionId).addNewMessageToPage(JsonConverter.Serialize(Message));
45                     }
46                 }                               
47             }
48             catch(Exception ex)
49             {
50                 //推送系統訊息
51                 Clients.Client(Context.ConnectionId).addSysMessageToPage("系統訊息:訊息傳送失敗,請稍後再試!");
52                 throw ex.InnerException;
53             }            
54         }

傳送私聊訊息

 1 /// <summary>
 2         /// 傳送給指定使用者(單播)
 3         /// </summary>
 4         /// <param name="clientId">接收使用者的連線ID</param>
 5         /// <param name="message">傳送的訊息</param>
 6         public void SendSingle(string clientId, string message)
 7         {
 8             try
 9             {
10                 //接收使用者連線為空
11                 if (string.IsNullOrEmpty(clientId))
12                 {
13                     //推送系統訊息
14                     Clients.Client(Context.ConnectionId).addSysMessageToPage("系統訊息:使用者不存在!");
15                 }
16                 else
17                 {
18                     //訊息使用者主體
19                     var UserOnline = UserOnlineManage.LoadListAll(p => p.ConnectId == Context.ConnectionId).FirstOrDefault();
20                     //接收訊息使用者主體
21                     var ReceiveUser = UserOnlineManage.LoadListAll(p => p.ConnectId == clientId).FirstOrDefault();
22                     if (ReceiveUser == null)
23                     {
24                         //推送系統訊息
25                         Clients.Client(Context.ConnectionId).addSysMessageToPage("系統訊息:使用者不存在!");
26                     }
27                     else
28                     {
29                         //儲存訊息
30                         ChatMessageManage.Save(new Domain.SYS_CHATMESSAGE() { FromUser = UserOnline.FK_UserId, MessageType = Common.Enums.ClsDic.DicMessageType["私聊"], MessageContent = message, MessageDate = DateTime.Now, MessageIP = Utils.GetIP(), ToGroup = UserOnline.SYS_USER.ID.ToString() });
31                         //返回訊息實體
32                         var Message = new Message() { ConnectId = UserOnline.ConnectId, UserName = UserOnline.SYS_USER.NAME, UserFace = string.IsNullOrEmpty(UserOnline.SYS_USER.FACE_IMG) ? "/Pro/Project/User_Default_Avatat?name=" + UserOnline.SYS_USER.NAME.Substring(0, 1) : UserOnline.SYS_USER.FACE_IMG, MessageDate = DateTime.Now.GetDateTimeFormats('D')[1].ToString() + " - " + DateTime.Now.ToString("HH:mm:ss"), MessageContent = message, MessageType = "private", UserId = UserOnline.SYS_USER.ID };                                        
33                         if (ReceiveUser.IsOnline)
34                         {
35                             //推送給指定使用者
36                             Clients.Client(clientId).addNewMessageToPage(JsonConverter.Serialize(Message));
37                         }
38                         //推送給使用者
39                         Clients.Client(Context.ConnectionId).addNewMessageToPage(JsonConverter.Serialize(Message));
40                         
41                     }
42                 }
43             }
44             catch (Exception ex)
45             {
46                 //推送系統訊息
47                 Clients.Client(Context.ConnectionId).addSysMessageToPage("系統訊息:訊息傳送失敗,請稍後再試!");
48                 throw ex.InnerException;
49             }            
50         }

前臺傳送訊息:

 1 $.connection.hub.start().done(function () {            
 2             chat.server.register('使用者帳號', '使用者密碼');
 3             //文字框回車推送
 4             $("#sendMessage").keyup(function (event) {
 5                 if (event.keyCode == 13 || event.which == 13)
 6                 {
 7                     if ($.trim($(this).val()) == '' || $.trim($(this).val()).length < 1) {
 8                         $(this).val($.trim($(this).val()));
 9                         $(this).focus();
10                         return false;
11                     }
12                     else {
13                         //私聊
14                         if ($.trim($("#person").val()) != '' && $.trim($("#person").val()).length > 1) {
15                             chat.server.sendSingle($("#person").val(), $(this).val());
16                         }
17                         else {
18                             chat.server.send($(this).val(), $("#group"
            
           

相關推薦

Asp.NET MVC 使用 SignalR 實現功能Hubs 線上聊天 獲取儲存使用者資訊

簡單介紹 在上一篇中,我們只是介紹了簡單的訊息推送,今天我們來修改一下,實現儲存訊息,歷史訊息和使用者線上 使用者登入註冊資訊 當用戶登入之後,我們註冊一下使用者的資訊,我們在ChatHub中 新建一個方法 Register(使用者帳號,使用者密碼) 前臺js呼叫這個方法實現使用者註冊 

Asp.NET MVC 使用 SignalR 實現功能Hubs 線上聊天

簡介       ASP .NET SignalR 是一個ASP .NET 下的類庫,可以在ASP .NET 的Web專案中實現實時通訊。什麼是實時通訊的Web呢?就是讓客戶端(Web頁面)和伺服器端可以互相通知訊息及呼叫方法,當然這是實時操作的。 WebSockets是HTML5提供的新的API

史上最全面的SignalR系列教程-2、SignalR 實現功能-永久連線類實現方式

1、概述 通過上篇史上最全面的SignalR系列教程-1、認識SignalR文章的介紹,我們對SignalR技術已經有了一個全面的瞭解。本篇開始就通過SignalR的典型應用的實現方式做介紹,例子雖然簡單,但麻雀雖小五臟俱全。可以以此為基礎,擴充套件到實際應用中。 SignalR 的實現機制與.NET WCF

史上最全面的SignalR系列教程-3、SignalR 實現功能-集線器類實現方式

1、概述 通過前兩篇 史上最全面的SignalR系列教程-1、認識SignalR 史上最全面的SignalR系列教程-2、SignalR 實現推送功能-永久連線類實現方式 文章對SignalR的介紹,我們對SignalR已經有了全面的認識。SignalR API 客戶端和伺服器端持久連線的通訊方式,一次連線代

Asp.Net Mvc基於Fleck開發的多人網頁版即時聊天

一、專案的核心說明 1、Fleck這個是實現websocket一個比較簡單第三方元件,它不需要安裝額外的容器。本身也就幾個介面可供呼叫。 2、專案是基於.net framework 4.7.2 ,在vs2019上開發的,沒試過在低版本上執行。但是程式碼上沒怎麼用到新特性,所以估計是可以被低版本使用的。 3、這

C#簡單的JPush極光 API實現功能來自mojocube的博客

size 返回 log c# api live str -s 周期 APP推送功能大家應該都了解了,目前主要的有百度、極光等幾家公司提供推送服務,下面說一下極光推送API的簡單實現推送通知功能。 註冊完極光的賬號後,就可以創建應用,建好後會得到AppKey和Master

ASP.NET MVC+Bootstrap 實現短信驗證

add this val data charset tracking load fadein 發送 短信驗證大家都已經非常熟悉了,基本上每天都在接觸手機短信的驗證碼,比方某寶,某東購物。站點註冊,網上銀行等等,都要驗證我們的手機號碼真實性。這樣做有什麽優

Asp.net MVC簡單實現生成Excel並下載

user query 輔助類 his rpath play 是我 none mod 由於項目上的需求,需要導出指定條件的Excel文件。經過一翻折騰終於實現了。 現在把代碼貼出來分享 (直接把我們項目裏面的一部份輔助類的代碼分享一下) 我們項目使用的是Asp.Net M

webApp如何實現功能

webApp如何實現推送功能     webApp如何實現推送功能。 實現思路: 1.通過個推推送實現,註冊個推賬號 2.配置推送功能模組 3.js實現推送   實現程式碼: 1、Hbuilder配置程式碼檢視配置 "plu

Asp.Net Core + SignalR 實現實時通訊

一、搭建專案 1、建立一個ASP.NET Core MVC 專案   2、nuget 下載和安裝 MicroSoft.AspNetCore.SignalR vs提示版本衝突 這時我們選擇低版本即可 二、SignalR配置 1、在model中建立一個類MyHub 程式

ASP.NET MVC 5實現基於Quartz.net 的任務排程管理平臺(一)

任務管理平臺 系統簡介 Quartz.net是一個開源的任務排程工具,相當於資料庫中的 Job、Windows 的計劃任務、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精細,對任務排程的領域問題進行了高度的抽象,實現作業的靈

iOS經典講解之實現App訊息功能()

作者:Loving_iOS 上一篇部落格iOS經典講解之實現App訊息推送功能(一)講解了實現訊息推送的的準備工作,接下來我們來講解第二部分的內容,實現具體的推送及程式碼示例。 訊息推送的第三方平臺有很多,這裡我們使用極光推送平臺,註冊極光推送平臺的賬號。 登陸後進入控

android 用signalr 實現服務

我做的app需要實現signalr 推送服務  有兩種方法 一種人家已經給我們集成了還有視訊教程 第二種自己整合     一共分兩步      第一步我是在activity 裡面實現接收伺服器推送的資料 這兩個是準備工作,下面就是 生成自己需要的包jar  1.O

ASP.NET MVC 5 實現基於Quartz.net 的任務排程管理平臺(四)(完)

CREATE DATABASE [TaskManager] ON PRIMARY ( NAME = N'TaskManager', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TaskM

ASP.Net MVC SignalR的應用

ASP.Net MVC SignalR的應用 最近做的一個MVC專案有個模組是要使用即時通訊實現彈幕效果。既要考慮通訊的實時性也要考慮伺服器效能和資源消耗,所幸專案對瀏覽器的版本沒有要求。所以我最先想到用WebSocket來實現,在查詢資料時, 看到 SignalR 這個技術,也就是本專題所討

【第二篇】ASP.NET MVC快速入門之數據註解MVC5+EF6

red 數據庫結構 varchar model 菜單 錯誤提示 edi 還需 問題 目錄 【第一篇】ASP.NET MVC快速入門之數據庫操作(MVC5+EF6) 【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6) 【第三篇】ASP.NET MVC快速入

ASP.NET MVC 解析模板生成靜態頁一RazorEngine

就是 about red 簡述 har ppa news odin mes 轉載 https://www.cnblogs.com/yuangang/p/5464758.html 簡述 Razor是ASP.NET MVC 3中新加入的技術,以作為ASP

Asp.net MVC Razor輸出字符串方法js中嵌入razor

del 方式 註意 標簽 字符串方法 .net 輸出 text mod @{ Model p = new Model(); //輸出名稱和年齡 //1.第一種方式 @:姓名[email protected] //

Asp.Net MVC+EF+三層架構 簡單搭建 1 Asp.Net MVC+EF+三層架構

首先,謝謝各位過客觀看,今天我們說下簡單的 Asp.Net MVC+EF+三層架構 搭建( 第一部分)。 很簡單,先看下完成之後程式碼圖:   這裡講的是一個整體框架的搭建,所以頁面暫時Pass,先以一個小的查詢為例。   一、新建Model、Dal、Bl

ASP.NET MVC 控制器向檢視傳遞模型資料可以是多個

利用ViewBag來傳遞資料檢視部分程式碼:           @model Login001.Models.YSY_Ware            商品            @foreach (var n in ViewBag.ware)            {