ASP .净MVC5网站开发用户修改资料和密码(六)
在上一篇文章网站开发(五)中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录知识产权,这次补上。今天做修改资料和修改密码,TryUpdateModel是新用到的东西。
现完善昨天的登录代码:
一、用户导航菜单这个就是侧栏的导航,以后所有控制器中行为名都为菜单。目标效果如下:
先用户控制器添加菜单操作。直接返回分布视图。右键添加视图
H3我的资料/H3/div div class='面板-主体' ul class='导航-凹坑导航-堆叠'阿利href=' @ Url .操作('详细信息)' span class=' glyphicon glyphicon-user '修改资料/span/a/li阿利。操作('更改密码)' span class=' glyphicon glyphicon-注销'修改密码/span/a/li阿利。操作('注销)' span class=' glyphicon glyphicon-注销'退出登录/span/a/li /ul /div/div二、显示用户资料再在用户控制器里添加显示用户资料的行动详情。以后约定所有显示详细资料的动作名都为细节。在控制器中返回当前用户的资料
///摘要///显示资料////summary////returns/returns public action result Details(){ return View(用户服务).查找(用户。身份。姓名));}右键添加视图
@模型尼尼微。模型。用户@{视图包标题='我的资料;} div class=' row ' div class=' col-MD-3 col-sm-4 ' @ Html .操作(' Menu ')/div div class=' col-MD-9 col-sm-8 ' ol class='面包屑' lispan class=' glyphicon glyphicon-home ' a会员中心/a/span/li lia个人中心/a/li li修改资料/Li/ol @使用(Html .开始通知('修改','用户){ @Html .反伪造token()div=' form-横置' H4用户资料/h4 hr/@Html .ValidationSummary(true) @Html .HiddenFor(model=model .UserID)div class=' form-group ' @ Html .标签(型号=型号.UserName,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .显示(模型=模型.UserName)/div/div class=' form-group ' @ Html .标签(型号=型号.DisplayName,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.DisplayName) @Html .ValidationMessageFor(model=model .显示名称)/div/div class=' form-group ' label class=' control-label col-MD-2 '用户组/label div class=' col-MD-10 ' @ foreach(模型中的var _ relation).user role relations){ span @ _ relations。Role.Name/spanbr/}/div/div class=' form-group ' @ Html .标签(型号=型号.电子邮件,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.电子邮件)@Html .ValidationMessageFor(model=model .电子邮件)/div/div class=' form-group ' div class=' col-MD-offset-2 col-MD-10 '输入类型='submit '值='修改=' BTNBTN-默认'//div/div/div }/div/div @ section Scripts { @ Scripts .render(' ~/bundles/jqueryval ')} @ foreach(模型中的var _relation ).UserRoleRelations){ span @ _ relations .角色。姓名/spanbr/}这里是显示用户组名称,延迟加载。
三、修改用户资料显示用户资料后点击修改直接向后台提交数据,这里把接受并更新数据库的动作名也是细节。在这个方法里不能直接用用户做方法参数,因为我只想跟新显示名和邮箱,我如果设置用户类型的参数,如果用户向服务器提交的参数中含有用户名,可能用户名都会改掉,这里使用TryUpdateModel来部分更新模型。
///摘要///修改资料////summary///returns/returns[validateantforgretoken][httpset]公共操作结果Modify(){ var _ user=user service .查找(用户。身份。姓名);if (_user==null) ModelState .AddModelError(','用户不存在');else { if (TryUpdateModel(_user,new string[] { 'DisplayName ',' Email ' })} { if(ModelState .IsValid) { if (userService .更新(_用户))模型状态.AddModelError(','修改成功!');否则模式状态.AddModelError(','无需要修改的资料');} } else ModelState .AddModelError(','更新模型数据失败');}返回视图(“详细信息”,_用户);}代码中的TryUpdateModel(_user,新字符串[] { '显示名称','电子邮件' })表示我只想从客户提交的数据中更新显示名称和电子邮件四、修改密码先建立一个视图模型ChangePasswordViewModel
使用系统。组件模型。数据注释;命名空间尼尼微.网络。区域。会员。车型{///总结///修改密码视图模型///备注创建:2014 .02 .19/备注////摘要公共类change passwordwiewmodel {///摘要///原密码////摘要[必选(错误消息='必填)][显示(名称='密码)][字符串长度(20,最小长度=6,错误消息='{2}到{1}个字符)] [DataType(数据类型.密码])公共字符串OriginalPassword { get设置;} ///摘要///新密码////摘要[必选(错误消息='必填)][显示(名称='新密码)][字符串长度(20,最小长度=6,错误消息='{2}到{1}个字符)] [DataType(数据类型.密码])公共字符串密码{ get设置;} ///摘要///确认密码////摘要[必选(错误消息='必填)][比较('密码,错误消息='两次输入的密码不一致)][显示(名称='确认密码)] [DataType(数据类型.密码])公共字符串确认密码{获取设置;} }}然后在用户控制器中添加动作公共操作结果更改密码()直接返一个视图。右键添加ChangePasswordViewModel类型的视图
@模型尼尼微网络。区域。会员。模特。更改passwordviewmodel @ { viewpag .Title='修改密码;} div class=' row ' div class=' col-MD-3 col-sm-4 ' @ Html .操作(' Menu ')/div div class=' col-MD-9 col-sm-8 ' ol class='面包屑' lispan class=' glyphicon glyphicon-home ' a会员中心/a/span/li lia个人中心/a/li li修改密码/Li/ol @使用(Html .begin inform()){ @ Html .反伪造token()div=' form-横置' H4修改密码/h4 hr/@Html .ValidationSummary(true)div class=' form-group ' @ Html .标签(型号=型号.OriginalPassword,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.OriginalPassword) @Html .ValidationMessageFor(model=model .原始密码)/div/div class=' form-group ' @ Html .标签(型号=型号.密码,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.密码)@Html .ValidationMessageFor(model=model .密码)/div/div class=' form-group ' @ Html .标签(型号=型号.ConfirmPassword,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.确认密码)@Html .ValidationMessageFor(model=model .确认密码)/div/div class=' form-group ' div class=' col-MD-offset-2 col-MD-10 '输入类型='submit '值='修改=' BTNBTN-默认'/div/div/div } @节脚本{ @脚本.render(' ~/bundles/jqueryval ')}/div/div在添加一个接受处理动作,代码也很简单
[validateantiforytoken][httpset]公共操作结果更改密码视图模型(更改密码视图模型密码视图模型){ if(模型状态IsValid) { var _user=userService .查找(用户。身份。姓名);if (_user .密码==通用。安全性。sha 256(passwordweiwmodel .OriginalPassword)) { _user .密码=通用。安全性。sha 256(passwordweiwmodel .密码);if (userService .更新(_用户))模型状态.AddModelError(','修改密码成功');否则模式状态.AddModelError(','修改密码失败');} else ModelState .AddModelError(','原密码错误');}返回视图(passwordwiewmodel);}五、在首页显示登录、注册链接在网的共享的文件件添加LoginPartial.cshtml视图文件,在用户未登录时显示登录和注册链接,登录后显示用户名。
@使用微软。标识@if(请求isaauthenticated){ 0使用(Html .开始通知('注销','用户,表单方法发布,新的{ id='logoutForm ',@ class=' nav bar-right ' }){ @ Html .antiforgrytoken()ul class=' nav bar-nav bar-right ' Li @ Html .ActionLink('你好用户。标识GetUserName()"!"、"管理"、"帐户"、路由评估: null、htmlAttributes: new { title='管理})/Li lia href=' JavaScript :文档。GetElementByID(' Logout FORm ').提交()'注销/a/Li/ul } } else { ul class='导航条-导航条-右' Li @ Html .ActionLink('注册,' Register ',' User ',路由评估:新{ Area=' Member ' },Html属性3360新{ id=' Register link ' })/Li Li @ Html .ActionLink('登录、"登录"、"用户"、路由评估:新{区域="成员" }、htmlAttributes:新{ id="登录链接" })/li /ul}效果如下:
登录前
登陆后
好的。现在我们可以给给成员区域的用户控制器控制器和家庭控制器加上[授权]特性。并为用户控制器的注册登录验证码行为加上[允许匿名]特性。
这次修改资料部分用到了部分更新模型方法尝试更新模型,到此成员区域的用户部分暂时结束。下次开始内容部分,希望大家继续关注。
版权声明:ASP .净MVC5网站开发用户修改资料和密码(六)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。