婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MVC4制作網站教程第二章 部分用戶功能實現代碼

MVC4制作網站教程第二章 部分用戶功能實現代碼

熱門標簽:地圖標注位置怎么弄圖 威力最大的電銷機器人 400電話唐山辦理 電銷專用外呼線路 旅游地圖標注線路 電話機器人鑰匙扣 電銷外呼系統是違法的嗎 漯河外呼調研線路 廣西房產智能外呼系統推薦

用戶部分要實現的功能有:
序 
一、用戶 
1.1用戶注冊 
1.2用戶登錄 
1.3修改密碼 
1.4修改資料

要實現這些目的首先新建用戶(Model)模型

/// summary>
 /// 用戶模型
 /// /summary>
 public class User
 {
 [Key]
 public int UserId { get; set; }
 /// summary>
 /// 用戶組Id
 /// /summary>
 [Display(Name="用戶組Id")]
 [Required(ErrorMessage = "×")]
 public int GroupId { get; set; }
 /// summary>
 /// 用戶名
 /// /summary>
 [Display(Name="用戶名",Description="4-20個字符。")]
 [Required(ErrorMessage = "×")]
 [StringLength(20, MinimumLength = 4, ErrorMessage = "×")]
 public string UserName { get; set; }
 /// summary>
 /// 密碼
 /// /summary>
 [Required]
 [StringLength(256)]
 public string Password { get; set; }
 /// summary>
 /// 性別【0-男;1-女;2-保密】
 /// /summary>
 [Display(Name="性別")]
 [Required(ErrorMessage = "×")]
 [Range(0,2,ErrorMessage = "×")]
 public byte Gender { get; set; }
 /// summary>
 /// Email
 /// /summary>
 [Display(Name="Email",Description="請輸入您常用的Email。")]
 [Required(ErrorMessage = "×")]
 [EmailAddress(ErrorMessage = "×")]
 public string Email { get; set; }
 /// summary>
 /// 密保問題
 /// /summary>
 [Display(Name="密保問題",Description="請正確填寫,在您忘記密碼時用戶找回密碼。4-20個字符。")]
 [Required(ErrorMessage = "×")]
 [StringLength(20, MinimumLength = 4, ErrorMessage = "×")]
 public string SecurityQuestion { get; set; }
 /// summary>
 /// 密保答案
 /// /summary>
 [Display(Name="密保答案",Description="請認真填寫,忘記密碼后回答正確才能找回密碼。2-20個字符。")]
 [Required(ErrorMessage = "×")]
 [StringLength(20, MinimumLength = 2, ErrorMessage = "×")]
 public string SecurityAnswer { get; set; }
 /// summary>
 /// QQ號碼
 /// /summary>
 [Display(Name="QQ號碼")]
 [RegularExpression("^[1-9][0-9]{4-13]$",ErrorMessage = "×")]
 [StringLength(12, MinimumLength = 6, ErrorMessage = "×")]
 public string QQ { get; set; }
 /// summary>
 /// 電話號碼
 /// /summary>
 [Display(Name="電話號碼",Description="常用的聯系電話(手機或固話),固話格式為:區號-號碼。")]
 [RegularExpression("^[0-9-]{11-13}$",ErrorMessage = "×")]
 public string Tel { get; set; }
 /// summary>
 /// 聯系地址
 /// /summary>
 [Display(Name="聯系地址",Description="常用地址,最多80個字符。")]
 [StringLength(80, ErrorMessage = "×")]
 public string Address { get; set; }
 /// summary>
 /// 郵編
 /// /summary>
 [Display(Name="郵編")]
 [RegularExpression("^[0-9]{6}$",ErrorMessage = "×")]
 public string PostCode { get; set; }
 /// summary>
 /// 注冊時間
 /// /summary>
 public DateTime? RegTime { get; set; }
 /// summary>
 /// 上次登錄時間
 /// /summary>
 public DateTime? LastLoginTime { get; set; }

 /// summary>
 /// 用戶組
 /// /summary>
 public virtual UserGroup Group { get; set; }
 } 

下面添加用戶Controller。在Controller文件夾點右鍵 選擇新建控制器名稱輸入UserController,完成后生成代碼如下: 

using System.Web.Mvc;
using CMS.Models;

namespace CMS.Controllers
{
 public class UserController : Controller
 {

 public ActionResult Register()
 {
 return View();
 }

 //
 // POST: /User/Create

 [HttpPost]
 public ActionResult Register(UserRegister uerReg)
 {
 try
 {
 // TODO: Add insert logic here

 return RedirectToAction("Index");
 }
 catch
 {
 return View();
 }
 }
 }
} 

馬上涉及的問題就是數據的存取,本來準備用Repository模式做,后來覺得用Repository模式在一個人寫個簡單那網站的情況下意義不大,寫起來反而有點啰嗦,干脆用偽Repository模式寫。項目中新建Repository文件夾。在文件夾中新建類CMS,用來實現EF的Context。代碼如下: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using CMS.Models;

namespace CMS.Repository
{
 public class CMSContext:DbContext
 {
 public DbSetUser> Users { get; set; }
 }
} 

簡單吧。再建一個類RepositoryBase,用來做***Repository的基類,里面寫Add,Update,Delete,Find幾個虛函數,方便在繼承類里面這幾個函數的名稱統一。 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace CMS.Repository
{
 public class RepositoryBaseTModel>
 {
 private CMSContext dbContext;
 public RepositoryBase()
 {
 dbContext = new CMSContext();
 }
 /// summary>
 /// 添加【繼承類重寫后才能正常使用】
 /// /summary>
 public virtual bool Add(TModel Tmodel) { return false; }
 /// summary>
 /// 更新【繼承類重寫后才能正常使用】
 /// /summary>
 public virtual bool Update(TModel Tmodel) { return false; }
 /// summary>
 /// 刪除【繼承類重寫后才能正常使用】
 /// /summary>
 public virtual bool Delete(int Id) { return false; }
 /// summary>
 /// 查找指定值【繼承類重寫后才能正常使用】
 /// /summary>
 public virtual TModel Find(int Id) { return default(TModel); }
 ~RepositoryBase()
 {
 if (dbContext != null)
 {
 dbContext.Dispose();
 }
 }
 }
} 

可以寫UserRepository的具體實現了,新建UserRepository類。重寫Add,Update方法后代碼如下: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CMS.Models;

namespace CMS.Repository
{
 public class UserRepository:RepositoryBaseUser>
 {
 private CMSContext dbContext;
 public UserRepository()
 {
 dbContext = new CMSContext();
 }
 /// summary>
 /// 添加用戶
 /// /summary>
 /// param name="user">用戶信息/param>
 /// returns>/returns>
 public override bool Add(User user)
 {
 if (user == null) return false;
 dbContext.Users.Add(user);
 if (dbContext.SaveChanges() > 0) return true;
 else return false;
 }
 /// summary>
 /// 更新用戶信息
 /// /summary>
 /// param name="user">/param>
 /// returns>/returns>
 public override bool Update(User user)
 {
 var _user = dbContext.Users.SingleOrDefault(u => u.UserId == user.UserId);
 if (_user == null) return false;
 _user = user;
 if (dbContext.SaveChanges() > 0) return true;
 else return false;
 }
 //public override 
 }
} 

到這里Repository的基本模式也出來了,現在MVC中的M和C都出來了就差V了,少了V相當于高富帥少了“富”在高,再帥都沒用。那么馬上下手為了寫view做準備。 
@Html.Label可以用來顯示字段的Display(Name=“”),@Html.DisplayText顯示模型中字段值。沒有找到用來顯示模型中字段的Display(……,Description=“”)屬性的HtmlHelper。先自己寫一個用。在項目中新建Extensions文件夾,右鍵添加類DisplayDescriptionExtensions,在生成的代碼中將命名空間改為System.Web.Mvc.Html,添加兩個靜態方法DisplayDescription和DisplayDescriptionFor。完成后代碼 :

using System.Linq.Expressions;

namespace System.Web.Mvc.Html
{
 public static class DisplayDescriptionExtensions
 {
 /// summary>
 /// 模型描述信息
 /// /summary>
 /// param name="htmlHelper">/param>
 /// param name="name">/param>
 /// returns>/returns>
 public static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name)
 {
 ModelMetadata _modelMetadata = ModelMetadata.FromStringExpression(name, htmlHelper.ViewData);
 return MvcHtmlString.Create(_modelMetadata.Description);
 }
 /// summary>
 /// 模型描述信息
 /// /summary>
 /// typeparam name="TModel">/typeparam>
 /// typeparam name="TResult">/typeparam>
 /// param name="htmlHelper">/param>
 /// param name="expression">/param>
 /// returns>/returns>
 public static MvcHtmlString DisplayDescriptionForTModel, TResult>(this HtmlHelperTModel> htmlHelper, ExpressionFuncTModel, TResult>> expression)
 {
 ModelMetadata _modelMetadata = ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData);
 return MvcHtmlString.Create(_modelMetadata.Description);
 }
 }
} 

好了,在視圖中就可以直接用@Html.DisplayDescriptionFor(model => model.UserName)或@Html.DisplayDescription(“.UserName”)調用描述信息了. 

到了這里后,大致的準備工作差不多了,還有兩個小東東實現一下就可以寫具體功能了。 

第一個小東東:驗證碼。驗證碼分兩塊一是隨機獲取一定位數的字符,另一塊是把字符繪制成圖片。 

在項目中添加Common 文件夾,在文件夾中新建Text類,在類實現函數VerificationText()利用Random獲取指定長度的隨機字符串,寫完后的代碼: 

using System;

namespace CMS.Common
{
 /// summary>
 /// 文本相關
 /// /summary>
 public class Text
 {
 /// summary>
 /// 獲取驗證碼【字符串】
 /// /summary>
 /// param name="Length">驗證碼長度【必須大于0】/param>
 /// returns>/returns>
 public static string VerificationText(int Length)
 {
 char[] _verification = new Char[Length];
 Random _random = new Random();
 char[] _dictionary = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
 for (int i = 0; i  Length; i++)
 {
 _verification[i] = _dictionary[_random.Next(_dictionary.Length - 1)];
 }
 return new string(_verification);
 }
 }
} 

現在可以繪制驗證碼了,這里會用到.net的GDI+,我看了很多朋友寫的驗證碼,一般都繪制了很多干擾點和干擾線,目的是為了使驗證碼不容易被電腦,個人覺得把繪制字的時候用材質刷繪制應該也能達到目的,所以找了一幅水彩畫的材質。 

用這個做字的材質也應該不太容易別識別吧,開始寫繪圖的代碼,在UserController里新建名為VerificationCode的Action,代碼如下: 

/// summary>
 /// 繪制驗證碼
 /// /summary>
 /// returns>/returns>
 public ActionResult VerificationCode()
 {
 int _verificationLength = 6;
 int _width = 100, _height = 20;
 SizeF _verificationTextSize;
 Bitmap _bitmap = new Bitmap(Server.MapPath("~/Skins/Common/Texture.jpg"),true);
 TextureBrush _brush = new TextureBrush(_bitmap);
 //獲取驗證碼
 string _verificationText = Common.Text.VerificationText(_verificationLength);
 //存儲驗證碼
 Session["VerificationCode"] = _verificationText.ToUpper();
 Font _font = new Font("Arial", 14, FontStyle.Bold);
 Bitmap _image = new Bitmap(_width, _height);
 Graphics _g = Graphics.FromImage(_image);
 //清空背景色
 _g.Clear(Color.White);
 //繪制驗證碼
 _verificationTextSize = _g.MeasureString(_verificationText, _font);
 _g.DrawString(_verificationText,_font,_brush,(_width-_verificationTextSize.Width)/2,(_height-_verificationTextSize.Height)/2);
 _image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
 return null;
 } 

打開瀏覽器看下效果還不錯。到此準備工作完成。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • ASP.NET MVC5網站開發用戶登錄、注銷(五)
  • ASP.NET MVC5網站開發用戶注冊(四)
  • ASP.NET MVC5 網站開發框架模型、數據存儲、業務邏輯(三)
  • ASP.NET MVC5網站開發顯示文章列表(九)
  • ASP.NET MVC5網站開發管理列表、回復及刪除(十三)
  • ASP.NET MVC5網站開發文章管理架構(七)
  • ASP.NET MVC5網站開發咨詢管理的架構(十一)
  • ASP.NET MVC5網站開發之展示層架構(五)
  • ASP.NET MVC5網站開發之用戶添加和瀏覽2(七)
  • ASP.NET MVC5網站開發之總體概述(一)

標簽:湖北 無錫 綏化 銅陵 焦作 湘西 欽州 試駕邀約

巨人網絡通訊聲明:本文標題《MVC4制作網站教程第二章 部分用戶功能實現代碼》,本文關鍵詞  MVC4,制作,網站,教程,第二章,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MVC4制作網站教程第二章 部分用戶功能實現代碼》相關的同類信息!
  • 本頁收集關于MVC4制作網站教程第二章 部分用戶功能實現代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩av电影天堂| 亚洲一区二区欧美日韩| 中文字幕一区二区三区蜜月| 日韩在线一区二区三区| 亚洲v中文字幕| 国产黑丝在线一区二区三区| 国产精品资源在线| 欧美三级日本三级少妇99| 亚洲国产中文字幕在线视频综合| 18成人在线视频| 亚洲成人综合视频| 免费观看日韩av| 暴力调教一区二区三区| 777亚洲妇女| 亚洲人成精品久久久久久| 久久99久久精品欧美| 欧美亚洲日本国产| 中文字幕成人在线观看| 久久精品二区亚洲w码| 成人中文字幕在线| 91浏览器打开| 久久久www成人免费无遮挡大片| 亚洲精品网站在线观看| 日日噜噜夜夜狠狠视频欧美人| 国产一区二区三区不卡在线观看 | 日韩视频一区二区| 69堂亚洲精品首页| 中文字幕一区二区在线观看| 日本中文在线一区| 国产成人在线网站| 精品区一区二区| 婷婷夜色潮精品综合在线| 91捆绑美女网站| 亚洲精品视频在线| 色综合天天性综合| 怡红院av一区二区三区| 99re66热这里只有精品3直播| 欧美精品日韩一本| 成人午夜视频免费看| 日韩一级欧美一级| 麻豆91小视频| 在线影视一区二区三区| wwwwxxxxx欧美| 97精品久久久午夜一区二区三区 | 国产亚洲欧美日韩日本| 欧美老年两性高潮| 日韩丝袜美女视频| 亚洲成人自拍一区| jvid福利写真一区二区三区| 欧美日韩在线一区二区| 中文字幕一区二区三| 久久不见久久见免费视频1| 欧美性淫爽ww久久久久无| 国产日韩欧美不卡| 亚洲国产美国国产综合一区二区| 国产在线一区观看| 欧美高清视频一二三区| 无吗不卡中文字幕| 久久久综合视频| 天天操天天综合网| 91在线国产福利| 中文字幕免费不卡在线| 国产一区二区在线免费观看| 亚洲18色成人| 日本一区二区三区高清不卡 | 蜜桃av一区二区| 99久久久精品免费观看国产蜜| 国产精品国模大尺度视频| 国产美女一区二区三区| 在线不卡免费av| 亚洲欧美另类小说视频| 国产精品一区二区三区乱码| 日韩午夜小视频| 在线欧美小视频| 亚洲va国产天堂va久久en| 欧美精品三级日韩久久| 久久精品水蜜桃av综合天堂| 日韩亚洲电影在线| 欧美日韩中字一区| 久久国内精品自在自线400部| 亚洲欧美日韩久久精品| 色婷婷久久久综合中文字幕| 自拍偷自拍亚洲精品播放| 久久久久久久久久电影| 国产精品亚洲综合一区在线观看| 久久久久久久久久久久电影| 欧美在线观看视频一区二区三区| 亚洲福利视频导航| 日韩三级在线观看| 国产精品一区二区无线| 韩日欧美一区二区三区| 国产精品伦理一区二区| 色综合天天综合色综合av| 亚洲自拍偷拍欧美| 久久网站热最新地址| 欧美三级午夜理伦三级中视频| 蜜臀av国产精品久久久久| 午夜精品久久久久久久久| 国产精品女主播在线观看| 欧美日韩国产高清一区二区三区| 国产精品热久久久久夜色精品三区| 欧洲一区二区av| 91蜜桃网址入口| 成人免费福利片| 国产酒店精品激情| 国产成人综合亚洲91猫咪| 性感美女久久精品| 日本美女一区二区| 麻豆视频观看网址久久| 国产精品视频在线看| 久久毛片高清国产| 欧美三级韩国三级日本三斤 | 久久亚洲一级片| 日韩精品一级二级| 人人狠狠综合久久亚洲| 国产大陆a不卡| 欧美性猛交xxxxxx富婆| 成人毛片视频在线观看| 国产999精品久久久久久| 日韩精品免费专区| 国产亚洲污的网站| 亚洲欧美一区二区三区久本道91| 亚洲码国产岛国毛片在线| 偷拍与自拍一区| 伊人婷婷欧美激情| 国产精品一区二区免费不卡 | 色偷偷一区二区三区| 成人av在线播放网址| 91黄视频在线观看| 久久久美女毛片| 欧美韩国日本综合| 日韩av中文字幕一区二区 | 欧美性大战久久久久久久| 色婷婷狠狠综合| 欧美视频一区二区三区四区| 69精品人人人人| 在线视频你懂得一区二区三区| 欧美亚洲禁片免费| 欧美在线999| 18欧美亚洲精品| 国产宾馆实践打屁股91| 欧美xxxxx裸体时装秀| 91社区在线播放| 国产欧美精品一区| 亚洲一区二区精品久久av| 国产毛片精品国产一区二区三区| 色菇凉天天综合网| 精一区二区三区| wwwwww.欧美系列| 国产精品自拍三区| 亚洲乱码国产乱码精品精98午夜 | 亚洲国产精品尤物yw在线观看| 91免费观看视频在线| 久久9热精品视频| 日韩免费在线观看| 99综合电影在线视频| 亚洲在线观看免费视频| 日韩一区二区三区免费看 | 国产精品国模大尺度视频| 国产精品一区二区果冻传媒| 国产欧美1区2区3区| 韩国成人在线视频| 一区av在线播放| 欧美群妇大交群的观看方式| 日韩精品电影在线观看| 精品国产一区二区三区四区四| 国内外成人在线| 亚洲黄色性网站| 亚洲精品一区在线观看| 26uuu久久综合| 这里只有精品电影| 精品国产乱码91久久久久久网站| 欧美日韩一区二区三区在线| 欧美日韩国产系列| 日本高清成人免费播放| 不卡av在线免费观看| 久久成人免费日本黄色| 亚洲精品国产一区二区精华液 | 精品久久久影院| 日韩一级完整毛片| 成人av资源下载| 蜜臀91精品一区二区三区| 国产99久久久国产精品| 一区二区三区在线视频观看| 国产色综合久久| 国产精品免费视频网站| 日本怡春院一区二区| 国产成人h网站| 一本到不卡精品视频在线观看| 六月婷婷色综合| 理论片日本一区| 国产精品成人免费精品自在线观看| 欧美韩国日本一区| 粉嫩一区二区三区在线看| 欧美性xxxxx极品少妇| 91麻豆精品国产自产在线观看一区| 91女神在线视频| 色婷婷狠狠综合| 久久国产精品无码网站| 国产精品不卡在线观看|