日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
YQBlog.NETMVC3博客系統(tǒng)之用戶系統(tǒng)實(shí)戰(zhàn)

在上一篇文章中,已經(jīng)對(duì)該博客系統(tǒng)的架構(gòu),功能設(shè)計(jì)做了一些介紹。點(diǎn)擊查看:YQBlog - 基于Asp.Net MVC3的個(gè)人博客系統(tǒng)分享【開源】

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站與策劃設(shè)計(jì),納雍網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:納雍等地區(qū)。納雍做網(wǎng)站價(jià)格咨詢:18982081108

這里對(duì)新增的部分做一些分享。

博客預(yù)覽

后臺(tái)預(yù)覽(屏蔽了增刪改)

源碼下載(請(qǐng)下載最新版YQBlog1.1)

【注:分類信息跟網(wǎng)站配置信息都涉及文件修改,如果修改失敗證明目錄權(quán)限不夠,需要添加下網(wǎng)站文件夾目錄(至少是content目錄)的net service用戶組控制權(quán)限】

新增功能:

1.用戶中心。

2.用戶在頁(yè)面中對(duì)于所發(fā)評(píng)論/留言的修改,刪除。

3.系統(tǒng)郵件發(fā)送(留言、回復(fù)email通知提醒)

4.簡(jiǎn)單的ubb編輯器

主要知識(shí)點(diǎn):

1.jquery選項(xiàng)卡

2.membership profile對(duì)于用戶信息的擴(kuò)充

3.flash頭像上傳

4.email在線發(fā)送(異步)

5.html,ubb代碼在c#以及js中的互相轉(zhuǎn)換

1.jquery 選項(xiàng)卡

基本上所有的選項(xiàng)卡菜單原理都一樣,首先把所有的內(nèi)容列出來(lái),切換也就是顯示一個(gè),其它的隱藏起來(lái)。一些看起來(lái)比較炫的效果無(wú)非就是通過(guò)到位的backgournd,border等樣式定義來(lái)實(shí)現(xiàn)。Jquery讓一切變得華麗且簡(jiǎn)單:

 
 
 
 
  1. $(function () {   
  2.     $("#ucenter .tabbtn").click(function () {  
  3.         var index = $("#ucenter .tabbtn").index($(this));  
  4.         $(this).addClass("u_current").siblings("li").removeClass("u_current");  
  5.         $($("#ucenter .tabitem").get(index)).show().siblings(".tabitem").hide();  
  6.     });  
  7.  
  8. }); 

html文檔:

 
 
 
 
  1.  
  2.         
       
    •             @res.BasicInformation
    •  
    •             @res.UploadAvatar
    •  
    •             @res.ModifyInformation
    •  
    •             @res.MyComments
    •  
    •             @res.MyMessages
    •  
    •         
     
 
  •  
  •  
  •   
  •   @res.BasicInformation
  •  
  •    
  •  
  •  
  •   
  •   @res.UploadAvatar
  •  
  •    
  •  
  •  
  •   
  •   @res.ModifyInformation
  •  
  •    
  •  
  •  
  •   
  •   @res.MyMessages
  •  
  •    
  •  
  •  
  •  

    效果圖:

    #p#

    2.membership profile對(duì)于用戶信息的擴(kuò)充

    YQBlog的用戶系統(tǒng)采用了微軟自帶的membership,在上一個(gè)版本中,并沒(méi)有涉及多少用戶的操作。所以這次主要是新增了一些用戶的功能。這里,我們需要對(duì)用戶信息進(jìn)行擴(kuò)展,包括用戶頭像上傳,詳細(xì)資料填寫,比如所在地,生日,qq,微博,facebook等。

    基于membership的用戶系統(tǒng)需要擴(kuò)展用戶信息,通常有兩種方式:

    1,創(chuàng)建新的用戶擴(kuò)展信息表,通過(guò)用戶主表的自增id關(guān)聯(lián)。結(jié)構(gòu)類似membership中的 aspnet_Users(主表) 與 aspnet_Membership

    2.使用membership自帶的Profile機(jī)制。

    我們采用方法2,利用membership的Profile機(jī)制擴(kuò)展用戶信息。

    (1)web.config中配置SqlProfileProvider以及自定義屬性元素。system.web節(jié)點(diǎn)下添加:

     
     
     
     
    1.  
    2.         
    3.           
    4.         
    5.              type="System.Web.Profile.SqlProfileProvider"   
    6.              connectionStringName="ApplicationServices"   
    7.              applicationName="/" />  
    8.         
    9.         
    10.           
    11.           
    12.           
    13.           
    14.           
    15.           
    16.           
    17.           
    18.           
    19.           
    20.           
    21.           
    22.           
    23.           
    24.           
    25.         
    26.      

    (2)處理程序。注意區(qū)分“當(dāng)前用戶”與“指定用戶”

     
     
     
     
    1. //獲取當(dāng)前用戶Profile信息  
    2. public ActionResult Index() {   
    3.    
    4.     ViewBag.nickname = HttpContext.Profile.GetPropertyValue(nickname);   
    5.     ......  
    6.     return View();   
    7. }   
    8.  
    9. //獲取指定用戶Profile信息  
    10. public ActionResult Index(string user) {   
    11.  
    12.     ProfileBase objProfile = System.Web.Profile.ProfileBase.Create(user);  
    13.     ViewBag.nickname = objProfile.GetPropertyValue("nickname");   
    14.     ......  
    15.     return View();   
    16. }   
    17.  
    18. //更新當(dāng)前用戶  
    19. [HttpPost]   
    20. public ViewResult Index(string nickname) {   
    21.    
    22.     HttpContext.Profile["nickname"] = nickname;  
    23.     ......  
    24.    
    25.     return View();   

    (完整代碼見程序源碼 Controllers/AccountController.cs)

    假如我們錄入nickname屬性的內(nèi)容為test。數(shù)據(jù)庫(kù)中查看aspnet_Profile表,PropertyNames字段中為nickname:S:0:4,nickname表示屬性名,S表示String類型,0:4表示PropertyValuesString字段中的從第0到第4位的內(nèi)容即為nickname屬性值,這里是test??梢妋embership profile是把所有屬性作為一個(gè)字符串,所有屬性值作為一個(gè)字符串來(lái)存儲(chǔ)的。再通過(guò)屬性部分的特定格式數(shù)據(jù)來(lái)存儲(chǔ)其數(shù)據(jù)格式信息以及匹配對(duì)應(yīng)的屬性值。

    小結(jié):membership profile對(duì)于擴(kuò)展一些用戶基礎(chǔ)信息還是很靈活的。但如果是一些讀寫頻繁或者會(huì)涉及到檢索,排序之類的操作,還是會(huì)選擇用擴(kuò)展表的方式。

    #p#

    3.flash頭像上傳

    用的是Discuz!NT的會(huì)員頭像上傳功能。遷移到了MVC中。相關(guān)程序:

     
     
     
     
    1. flash文件及上傳目錄:/Content/Avatar  
    2. 調(diào)用程序: /Account/UCenter (/Views/Account/UCenter.cshtml)  
    3. 上傳程序:/AjaxAvatar.ashx 

    Global.asax中添加:

     
     
     
     
    1. routes.IgnoreRoute("ajaxAvatar.ashx"); 

    #p#

    4.email在線發(fā)送(異步)

    介紹兩種方式,WebMail 和 SmtpClient。程序中采用了SmtpClient

    (1)WebMail

     
     
     
     
    1. ///   
    2.         /// WebMail發(fā)送電子郵件  
    3.         ///   
    4.         public static void SendWebMail(string emailTo, string emailTitle, string emailContent,string[] filePath = null, string[] additionalHeaders = null)          
    5.         {   
    6.             WebMail.SmtpServer = configinfo.SmtpServer;//獲取或設(shè)置要用于發(fā)送電子郵件的 SMTP 中繼郵件服務(wù)器的名稱。              
    7.             WebMail.SmtpPort = configinfo.SmtpPort;//發(fā)送端口                      
    8.             WebMail.UserName = configinfo.SmtpUser;//賬號(hào)名              
    9.             WebMail.From = configinfo.AdminEmail;//郵箱名              
    10.             WebMail.Password = configinfo.SmtpPass;//密碼     
    11.             WebMail.EnableSsl = true;//是否啟用 SSL GMAIL 需要 而其他都不需要 具體看你在郵箱中的配置      
    12.             WebMail.SmtpUseDefaultCredentials = true;//是否使用默認(rèn)配置                      
    13.             try 
    14.             {  
    15.           WebMail.Send(to: emailTo, subject: emailTitle, body: emailContent, isBodyHtml: true, filesToAttach: filePath, additionalHeaders: additionalHeaders);  
    16.             }  
    17.             catch{}          
    18.         } 

    (2)SmtpClient

     
     
     
     
    1. ///   
    2.         /// SmtpClient發(fā)送電子郵件  
    3.         ///   
    4.         public static void SendSysMail(string to, string subject, string body)  
    5.         {  
    6.             string from = configinfo.AdminEmail;  
    7.             string host = configinfo.SmtpServer;  
    8.             string userName = configinfo.SmtpUser;  
    9.             string password = configinfo.SmtpPass;  
    10.             int port = configinfo.SmtpPort;  
    11.             SendMail(from, to, subject, body, host, port, userName, password);  
    12.         }  
    13.  
    14.         ///   
    15.         /// SmtpClient發(fā)送電子郵件  
    16.         ///   
    17.         /// 發(fā)件人  
    18.         /// 收件人  
    19.         /// 郵件主題  
    20.         /// 郵件內(nèi)容  
    21.         /// 發(fā)送服務(wù)地址(smtp.gmail.com)  
    22.         /// 發(fā)送郵件服務(wù)器端口  
    23.         /// 用戶名  
    24.         /// 密碼  
    25.         public static void SendMail(string from, string to, string subject, string body, string host, int port, string userName, string password)  
    26.         {  
    27.             MailMessage message = new MailMessage(from, to, subject, body);  
    28.             message.IsBodyHtml = true;  
    29.             message.BodyEncoding = Encoding.UTF8;  
    30.             SmtpClient client = new SmtpClient(host);  
    31.             client.Credentials = new NetworkCredential(userName, password);  
    32.             client.DeliveryMethod = SmtpDeliveryMethod.Network;  
    33.             client.EnableSsl = true;  
    34.             client.Port = port;  
    35.             client.Send(message);  
    36.         } 

    實(shí)現(xiàn)異步發(fā)送

    用戶提交評(píng)論/留言的同時(shí),會(huì)判斷他@了哪些用戶需要發(fā)送email提醒信并且發(fā)送,email發(fā)送是比較耗時(shí)的,如果等這個(gè)操作完成才返回,就會(huì)很容易卡在發(fā)評(píng)論/回復(fù)的位置。所以我們應(yīng)用委托異步來(lái)實(shí)現(xiàn)。

     
     
     
     
    1. //定義委托  
    2.         delegate void sendDelegate(string paras);  
    3.  
    4.  //發(fā)送email  
    5.         private void SendEmails(string paras)  
    6.         {  
    7.             //email發(fā)送代碼  
    8.        }    
    9.  
    10.  //調(diào)用  
    11.         new sendDelegate(SendEmails).BeginInvoke(paras, null, null); 

    這里是把郵件的相關(guān)設(shè)置項(xiàng)寫到了我們自定義的網(wǎng)站配置文件中(general.config),你也可以硬編碼在函數(shù)里,或者在webconfig的appSettings中去定義。

    后臺(tái)郵件發(fā)送相關(guān)配置截圖:

    #p#

    5.UBB編輯器,html,ubb代碼在c#以及js中的互相轉(zhuǎn)換

     
     
     
     
    1. js部分位于Content\js\blog.js中  
    2. c#部分位于General\WebUtils.cs中 

    主要也就是各種正則轉(zhuǎn)換。

    #p#

    6.用戶在頁(yè)面中對(duì)于所發(fā)評(píng)論/留言的修改,刪除

    主要是一些ajax異步操作

    一個(gè)小技巧。異步加載的對(duì)象事件執(zhí)行需要用live.直接click是不行的。

    例如:

     
     
     
     
    1. //評(píng)論修改  
    2. $(".reply-update").live("click", function () {  
    3.     //your code  
    4. }); 

    小分享一下我的學(xué)習(xí)心得:

    1.百度知道

    百度知道什么都知道,不乏小白問(wèn)題,比如,你可以去百度知道搜索mvc是什么,怎么學(xué)mvc,要看哪些書等等。你想問(wèn)的,不管有多小白,基本上都會(huì)有人問(wèn)過(guò)。這個(gè)過(guò)程主要是為了讓你對(duì)即將涉足的領(lǐng)域能有個(gè)大體輪廓。往往它能夠讓你在后面少走一些彎路。當(dāng)你覺得已經(jīng)看出個(gè)大概的時(shí)候,該轉(zhuǎn)戰(zhàn)博客園了。

    2.博客園

    (1)如果博客園制作了這個(gè)部分的專題。去看看專題里的文章。

    (2)不妨看看所謂“速成”的文章,雖然沒(méi)有真正速成這回事,但基本上他能給你講了重點(diǎn)?!叭腴T”的快感對(duì)初學(xué)者來(lái)說(shuō)也很重要的。

    (3)用你能想到的想關(guān)聯(lián)關(guān)鍵字去搜索,好的博文不吝收藏,好的博客不吝關(guān)注。

    (4)挑選一兩個(gè)不錯(cuò)的系列(博客園寫各種系列文章的博主很多),專注的去學(xué)習(xí)。

    3.源碼

    下載一些源碼來(lái)學(xué)習(xí)。不要一開始就去下源碼,一頭霧水的次數(shù)多了也會(huì)打擊積極性。還是得先看一些文章,有一些基礎(chǔ)知識(shí)儲(chǔ)備。你可以集中一個(gè)時(shí)間去搜集源碼。然后泛泛的過(guò)一遍,最后還是挑選一兩個(gè)覺得不錯(cuò)的去深入學(xué)習(xí)。

    4.實(shí)踐

    比如學(xué)習(xí)MVC,MVC是什么?它是微軟繼webform后新的web開發(fā)框架。對(duì),它是用來(lái)做網(wǎng)站的,那我們現(xiàn)在正在學(xué)習(xí)MVC,不,你在學(xué)習(xí)做網(wǎng)站。MVC只是我們做網(wǎng)站的一個(gè)解決方案,我們學(xué)習(xí)MVC,那我們就一定要去做網(wǎng)站。在實(shí)踐的過(guò)程中,發(fā)現(xiàn)問(wèn)題,解決問(wèn)題。也通過(guò)實(shí)踐,讓我們學(xué)習(xí)的各種知識(shí)能有所積累,沉淀。翻看我前面幾篇博文可以看出,現(xiàn)在的這個(gè)YQBlog其實(shí)就是幾個(gè)月前我開始學(xué)習(xí)MVC3時(shí)的那個(gè)demo.

    5.搜索

    不懂就問(wèn),切記自己跟自己鉆牛角尖,也切記閉門造車。閉門造車就是有時(shí)候我們要解決一個(gè)問(wèn)題,自己在那折騰來(lái)折騰去,好不容易搞定了,回頭一看,微軟都給你封裝好了,一個(gè)方法就ok了。

    搜索的方法:“先博客園站內(nèi)搜索再google搜索”。博客園的專注度更高,且搜索結(jié)果博客里的其它文章往往也會(huì)讓我們有意外收獲。google在于它的精準(zhǔn),特別是多關(guān)鍵字的模糊搜索時(shí),忘了百度吧。如果還是搜索不到結(jié)果,試著把關(guān)鍵字換成英文的。這個(gè)時(shí)候,基本上stackoverflow就會(huì)出來(lái)告訴你答案。

    原文鏈接:http://www.cnblogs.com/yqhome/archive/2012/07/11/2585584.html


    分享標(biāo)題:YQBlog.NETMVC3博客系統(tǒng)之用戶系統(tǒng)實(shí)戰(zhàn)
    新聞來(lái)源:http://www.dlmjj.cn/article/dpjocse.html

    其他資訊