這篇文章主要介紹了MVC4制作網(wǎng)站之如何實現(xiàn)部分用戶功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

用戶部分要實現(xiàn)的功能有:
序
一、用戶
1.1用戶注冊
1.2用戶登錄
1.3修改密碼
1.4修改資料
要實現(xiàn)這些目的首先新建用戶(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="請認(rèn)真填寫,忘記密碼后回答正確才能找回密碼。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="常用的聯(lián)系電話(手機(jī)或固話),固話格式為:區(qū)號-號碼。")]
[RegularExpression("^[0-9-]{11-13}$",ErrorMessage = "×")]
public string Tel { get; set; }
/// <summary>
/// 聯(lián)系地址
/// </summary>
[Display(Name="聯(lián)系地址",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();
}
}
}
}馬上涉及的問題就是數(shù)據(jù)的存取,本來準(zhǔn)備用Repository模式做,后來覺得用Repository模式在一個人寫個簡單那網(wǎng)站的情況下意義不大,寫起來反而有點啰嗦,干脆用偽Repository模式寫。項目中新建Repository文件夾。在文件夾中新建類CMS,用來實現(xiàn)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 DbSet<User> Users { get; set; }
}
}簡單吧。再建一個類RepositoryBase,用來做***Repository的基類,里面寫Add,Update,Delete,Find幾個虛函數(shù),方便在繼承類里面這幾個函數(shù)的名稱統(tǒng)一。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace CMS.Repository
{
public class RepositoryBase<TModel>
{
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的具體實現(xiàn)了,新建UserRepository類。重寫Add,Update方法后代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CMS.Models;
namespace CMS.Repository
{
public class UserRepository:RepositoryBase<User>
{
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的基本模式也出來了,現(xiàn)在MVC中的M和C都出來了就差V了,少了V相當(dāng)于高富帥少了“富”在高,再帥都沒用。那么馬上下手為了寫view做準(zhǔn)備。
@Html.Label可以用來顯示字段的Display(Name=“”),@Html.DisplayText顯示模型中字段值。沒有找到用來顯示模型中字段的Display(……,Description=“”)屬性的HtmlHelper。先自己寫一個用。在項目中新建Extensions文件夾,右鍵添加類DisplayDescriptionExtensions,在生成的代碼中將命名空間改為System.Web.Mvc.Html,添加兩個靜態(tài)方法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 DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression)
{
ModelMetadata _modelMetadata = ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData);
return MvcHtmlString.Create(_modelMetadata.Description);
}
}
}好了,在視圖中就可以直接用@Html.DisplayDescriptionFor(model => model.UserName)或@Html.DisplayDescription(“.UserName”)調(diào)用描述信息了.
到了這里后,大致的準(zhǔn)備工作差不多了,還有兩個小東東實現(xiàn)一下就可以寫具體功能了。
第一個小東東:驗證碼。驗證碼分兩塊一是隨機(jī)獲取一定位數(shù)的字符,另一塊是把字符繪制成圖片。
在項目中添加Common 文件夾,在文件夾中新建Text類,在類實現(xiàn)函數(shù)VerificationText()利用Random獲取指定長度的隨機(jī)字符串,寫完后的代碼:
using System;
namespace CMS.Common
{
/// <summary>
/// 文本相關(guān)
/// </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);
}
}
}現(xiàn)在可以繪制驗證碼了,這里會用到.net的GDI+,我看了很多朋友寫的驗證碼,一般都繪制了很多干擾點和干擾線,目的是為了使驗證碼不容易被電腦,個人覺得把繪制字的時候用材質(zhì)刷繪制應(yīng)該也能達(dá)到目的,所以找了一幅水彩畫的材質(zhì)。

用這個做字的材質(zhì)也應(yīng)該不太容易別識別吧,開始寫繪圖的代碼,在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;
}打開瀏覽器看下效果
還不錯。到此準(zhǔn)備工作完成。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MVC4制作網(wǎng)站之如何實現(xiàn)部分用戶功能”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
文章標(biāo)題:MVC4制作網(wǎng)站之如何實現(xiàn)部分用戶功能-創(chuàng)新互聯(lián)
本文地址:http://chinadenli.net/article14/eodge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、小程序開發(fā)、微信小程序、外貿(mào)建站、商城網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容