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) {