手机版

MVC4制作网站教程第二章部分用户功能实现代码

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

用户部分要实现的功能有:序一、用户1.1用户注册1.2用户登录1.3修改密码1.4修改资料

要实现这些目的首先新建用户(型号)模型

///摘要///用户模型////摘要公共类用户{[Key]public int UserID { get;设置;} ///摘要///用户组id/摘要[显示(名称='用户组id ')][必选(错误消息='')]public int GrouP id { get;设置;} ///摘要///用户名////摘要[显示(名称='用户名,描述='4-20个字符)][必选(错误消息='')][字符串长度(20,最小长度=4,错误消息='')]公共字符串用户名{ get设置;} ///摘要///密码////摘要[必选][字符串长度(256)]公共字符串密码{获取设置;} ///摘要///性别【0-男;1-女;2-保密】/////摘要[显示(名称='性别)][必选(ErrorMessage='')][范围(0,2,错误消息='')]公共字节性别{ get设置;} ///摘要////电子邮件////摘要[显示(名称='电子邮件,描述='请输入您常用的电子邮件)][必选(错误消息='')][电子邮件地址(错误消息='')]公共字符串电子邮件{ get设置;} ///摘要///密保问题////摘要[显示(名称='密保问题,描述='请正确填写,在您忘记密码时用户找回密码。4-20个字符)][必选(错误消息='')][字符串长度(20,最小长度=4,错误消息='')]公共字符串安全性问题{获取设置;} ///摘要///密保答案////摘要[显示(名称='密保答案,描述='请认真填写,忘记密码后回答正确才能找回密码。2-20个字符)][必选(错误消息='')][字符串长度(20,最小长度=2,错误消息='')]公共字符串SecurityAnswer { get设置;} ///摘要///QQ号码////摘要[显示(名称='QQ号码)][regularexpression('^[1-9][0-9]{4-13]$',errormessage='')][字符串长度(12,最小长度=6,错误消息='')]公共字符串qq { get设置;} ///摘要///电话号码////摘要[显示(名称='电话号码,描述='常用的联系电话(手机或固话),固话格式为:区号-号码)][regularexpression('^[0-9-]{11-13}$',errormessage='']公共字符串电话{获取设置;} ///摘要///联系地址////摘要[显示(名称='联系地址,描述='常用地址,最多80个字符)][字符串长度(80,ErrorMessage='')]公共字符串地址{获取设置;} ///摘要///邮编////摘要[显示(名称='邮编)][regularexpression('^[0-9]{6}$',errormessage='']公共字符串邮政编码{获取设置;} ///摘要///注册时间////汇总公共日期时间?RegTime { get设置;} ///摘要///上次登录时间////汇总公共日期时间?LastLoginTime { get设置;} ///摘要///用户组////摘要公共虚拟用户组组{获取设置;} } 下面添加用户控制器。在控制器文件夹点右键选择新建控制器名称输入用户控制器,完成后生成代码如下:

使用系统网络。手动音量调节使用内容管理系统.模型;命名空间内容管理系统.控制器{公共类用户控制器:控制器{公共操作结果寄存器(){返回视图();}////发布:/用户/创建[httpset]公共操作结果注册(用户注册ueeg){尝试{//todo :在此添加插入逻辑返回重定向到操作(“索引”);} catch { return View();} } }} 马上涉及的问题就是数据的存取,本来准备用贮藏室仓库模式做,后来觉得用贮藏室仓库模式在一个人写个简单那网站的情况下意义不大,写起来反而有点啰嗦,干脆用伪贮藏室仓库模式写。项目中新建贮藏室仓库文件夹。在文件夹中新建类CMS,用来实现仰角指示器的背景。代码如下:

使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统。数据。实体;使用内容管理系统.模型;命名空间内容管理系统.存储库{公共类CMSContext:DbContext {公共数据库集用户{获取设置;} }} 简单吧。再建一个类定位数据库,用来做* * *存储库的基类,里面写添加、更新、删除、查找几个虚函数,方便在继承类里面这几个函数的名称统一。

使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.命名空间内容管理系统.存储库{公共类RepositoryBaseTModel {私有CMS context dbContextpublic Repostorybase(){ DBContext=new CMS context();} ///摘要///添加【继承类重写后才能正常使用】/////汇总公共虚拟bool Add(t model t model){ return false;} ///摘要///更新【继承类重写后才能正常使用】/////汇总公共虚拟bool Update(t model t model){返回false} ///摘要///删除【继承类重写后才能正常使用】/////汇总公共虚拟bool Delete(int Id){ 0返回false }////摘要///查找指定值【继承类重写后才能正常使用】/////汇总公共虚拟t model Find(int Id){ 0返回默认值(t型);} ~ Repostorybase(){ if(DBcontext!=null) { dbContext .dispose();} } }} 可以写用户存储库的具体实现了,新建用户存储库类。重写添加、更新方法后代码如下:

使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用内容管理系统.模型;命名空间内容管理系统.存储库{公共类用户存储库:存储库数据库用户{私有CMSContext dbContextpublic用户存储库(){ DBContext=new CmContext();} ///摘要///添加用户////summary ///param name='user '用户信息/param /返回/返回公共重写bool Add(用户用户){ if(用户==null)返回虚假背景.用户。添加(用户);if (dbContext .保存更改(0)返回真实的否则返回false }////摘要///更新用户信息////summary////param name=' User '/param////返回/返回公共覆盖bool Update(用户用户用户){ var _user=dbContext .用户。SingleOrDefault(u=u . UserID==user .UserId);如果(_user==null)返回false_user=用户;if (dbContext .保存更改(0)返回真实的否则返回false}//公共覆盖}}到这里贮藏室仓库的基本模式也出来了,现在手动音量调节中的M和C都出来了就差V了,少了V相当于高富帅少了"富"在高,再帅都没用。那么马上下手为了写视角做准备@Html .标签可以用来显示字段的显示(名称=",@Html .显示文本显示模型中字段值。没有找到用来显示模型中字段的显示(……,描述=")属性的HtmlHelper。先自己写一个用。在项目中新建扩展扩张文件夹,右键添加类显示描述扩展,在生成的代码中将命名空间改为系统网络。Mvc.Html,添加两个静态方法显示描述和显示描述。完成后代码:

使用系统Linq。表达式;系统命名空间网络。Mvc.Html{公共静态类DisplayDescriptionExtensions {///summary///模型描述信息////summary////param name=' HTMl helper '/param///param name=' name '/param///returns/returns public static mvchtmlString显示说明(此HtmlHelper为HTMl助手,字符串名称){模型元数据_模型元数据=模型元数据.FromStringExpression(名称,htmlHelper .查看数据);返回MvcHtmlString .创建(_模型元数据.描述);} ///摘要///模型描述信息////summary///type param name=' t model '/type param///type param name=' TResult '/type param///param name=' htmlHelper '/param///param name=' expression '/param///返回/返回公共静态MvcHtmlString displaydescriptionFOrtmodel,TResult(此HTMl帮助器、表达式工作模型、默认表达式){ model metadata _ model metadata=model metadata .FromLambdaExpression(表达式,htmlHelper .查看数据);返回MvcHtmlString .创建(_模型元数据.描述);} }} 好了,在视图中就可以直接用@Html .显示(模型=模型1)的描述.用户名)或@Html .显示描述(" .用户名")调用描述信息了。

到了这里后,大致的准备工作差不多了,还有两个小东东实现一下就可以写具体功能了。

第一个小东东:验证码。验证码分两块一是随机获取一定位数的字符,另一块是把字符绘制成图片。

在项目中添加普通文件夹,在文件夹中新建文本类,在类实现函数验证文本()利用随意获取指定长度的随机字符串,写完后的代码:

使用系统;命名空间内容管理系统.常用{ ///summary ///文本相关////摘要公共类文本{ ///摘要///获取验证码【字符串】////summary///param name=' Length '验证码长度【必须大于0】/param////返回/返回公共静态字符串VerificationText(int Length){ Char[]_ verification=新的Char[Length];Random _ Random=new Random();char[]_ dictionary={‘A’、‘B’、‘C’、‘D’、‘E’、‘F’、‘G’、‘H’、‘I’、‘K’、‘L’、‘M’、‘N’、‘O’、‘P’、‘Q’、‘R’、‘S’、‘T’、‘U’、‘V’、‘W’、‘Y’、‘Z’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’、‘G’、‘H’、‘I’、‘J’、‘K’、‘L’、‘M’、‘N’、‘O’、‘P’、‘Q’、‘R’,for(int I=0;一。长度;I){ _验证[I]=_字典[_随机.下一个(_字典。长度-1)];}返回新字符串(_验证);} }} 现在可以绘制验证码了,这里会用到。网的GDI,我看了很多朋友写的验证码,一般都绘制了很多干扰点和干扰线,目的是为了使验证码不容易被电脑,个人觉得把绘制字的时候用材质刷绘制应该也能达到目的,所以找了一幅水彩画的材质。

用这个做字的材质也应该不太容易别识别吧,开始写绘图的代码,在用户控制器里新建名为验证代码的行动,代码如下:

///摘要///绘制验证码////summary///returns/returns public action result VerificationCode(){ int _ verificationLength=6;int _width=100,_ height=20SizeF _ verificationTextSize位图=新位图(服务器. MapPath(' ~/Skins/Common/texture。jpg’),真);纹理笔刷_ brush=新纹理笔刷(_位图);//获取验证码字符串_验证文本=公共文本。VerificationText(_ verificationLength);//存储验证码会话['验证代码']=_验证文本Toupper();Font _font=新字体(' Arial ',14,FontStyle .粗体);位图_图像=新位图(_宽度,_高度);图形_g=图形.来自图像(_ image);//清空背景色_g。透明(颜色。白色);//绘制验证码_ verificationTextSize=_ g .度量字符串(_ verificationText,_ font);_ g . drawL(_ verificationText,_font,_brush,(_width-_verificationTextSize .宽度)/2,(_height-_verificationTextSize .高度)/2);_图像。保存(响应。输出流,系统绘图。成像。imageformat。JPEG);返回null}打开浏览器看下效果

还不错。到此准备工作完成。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:MVC4制作网站教程第二章部分用户功能实现代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。