校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > ASP.NET MVC5網(wǎng)站開(kāi)發(fā)用戶(hù)修改資料和密碼(六)

ASP.NET MVC5網(wǎng)站開(kāi)發(fā)用戶(hù)修改資料和密碼(六)

熱門(mén)標(biāo)簽:安陸市地圖標(biāo)注app 寧德防封版電銷(xiāo)卡 上海市三維地圖標(biāo)注 云南外呼系統(tǒng)代理 西寧電銷(xiāo)外呼系統(tǒng)公司 聊城智能電銷(xiāo)機(jī)器人電話 辦公用地圖標(biāo)注網(wǎng)點(diǎn)怎么操作 海東防封電銷(xiāo)卡 南昌自動(dòng)外呼系統(tǒng)線路

在上一篇文章網(wǎng)站開(kāi)發(fā)(五)中實(shí)現(xiàn)了用戶(hù)的注銷(xiāo)和登錄,其實(shí)代碼里落了點(diǎn)東西,就是用戶(hù)登錄要更新最后一次登錄時(shí)間和登錄IP,這次補(bǔ)上。今天做修改資料和修改密碼,TryUpdateModel是新用到的東西。

現(xiàn)完善昨天的登錄代碼:

一、用戶(hù)導(dǎo)航菜單
這個(gè)就是側(cè)欄的導(dǎo)航,以后所有控制器中action名都為Menu。目標(biāo)效果如下:

先UserController添加Menu action。直接返回分布視圖。右鍵添加視圖

div class="panel panel-primary">
 div class="panel-heading">h3>我的資料/h3>/div>
 div class="panel-body">
 ul class="nav nav-pills nav-stacked">
  li> a href="@Url.Action("Details")">span class="glyphicon glyphicon-user"> 修改資料/span>/a>/li>
  li> a href="@Url.Action("ChangePassword")">span class="glyphicon glyphicon-log-out"> 修改密碼/span>/a>/li>
  li> a href="@Url.Action("Logout")">span class="glyphicon glyphicon-log-out"> 退出登錄/span>/a>/li>
 /ul>
 /div>
/div>

二、顯示用戶(hù)資料
再在User控制器里添加顯示用戶(hù)資料的action Details。以后約定所有顯示詳細(xì)資料的動(dòng)作名都為Details。在控制器中返回當(dāng)前用戶(hù)的資料

/// summary>
 /// 顯示資料
 /// /summary>
 /// returns>/returns>
 public ActionResult Details()
 {
  return View(userService.Find(User.Identity.Name));
 }

右鍵添加視圖

@model Ninesky.Models.User

@{
 ViewBag.Title = "我的資料";
}

div class="row">
 div class="col-md-3 col-sm-4">@Html.Action("Menu")/div>
 div class="col-md-9 col-sm-8">

 ol class="breadcrumb">
  li>span class="glyphicon glyphicon-home">a> 會(huì)員中心/a>/span>/li>
  li>a> 個(gè)人中心/a>/li>
  li>修改資料/li>
 /ol>

 @using (Html.BeginForm("Modify","User"))
 {
  @Html.AntiForgeryToken()

  div class="form-horizontal">
  h4>用戶(hù)資料/h4>
  hr />
  @Html.ValidationSummary(true)
  @Html.HiddenFor(model => model.UserID)

  div class="form-group">
   @Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" })
   div class="col-md-10">
   @Html.DisplayFor(model => model.UserName)
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.DisplayName, new { @class = "control-label col-md-2" })
   div class="col-md-10">
   @Html.EditorFor(model => model.DisplayName)
   @Html.ValidationMessageFor(model => model.DisplayName)
   /div>
  /div>

  div class="form-group">
   label class = "control-label col-md-2">用戶(hù)組/label>
   div class="col-md-10">
   @foreach (var _relation in Model.UserRoleRelations){ span>@_relation.Role.Name/span>br />}
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.Email, new { @class = "control-label col-md-2" })
   div class="col-md-10">
   @Html.EditorFor(model => model.Email)
   @Html.ValidationMessageFor(model => model.Email)
   /div>
  /div>
  div class="form-group">
   div class="col-md-offset-2 col-md-10">
   input type="submit" value="修改" class="btn btn-default" />
   /div>
  /div>
  /div>
 }
 /div>
/div>
@section Scripts {
 @Scripts.Render("~/bundles/jqueryval")
}

@foreach (
var _relation in Model.UserRoleRelations){ span>@_relation.Role.Name/span>br />} 這里是顯示用戶(hù)組名稱(chēng),延遲加載。

 三、修改用戶(hù)資料
顯示用戶(hù)資料后點(diǎn)擊修改直接向后臺(tái)提交數(shù)據(jù),這里把接受并更新數(shù)據(jù)庫(kù)的動(dòng)作名也是Details。在這個(gè)方法里不能直接用User做方法參數(shù),因?yàn)槲抑幌敫嘛@示名和郵箱,我如果設(shè)置User類(lèi)型的參數(shù),如果用戶(hù)向服務(wù)器提交的參數(shù)中含有UserName,可能用戶(hù)名都會(huì)改掉,這里使用TryUpdateModel來(lái)部分更新模型。

/// summary>
 /// 修改資料
 /// /summary>
 /// returns>/returns>
 [ValidateAntiForgeryToken]
 [HttpPost]
 public ActionResult Modify()
 {

  var _user = userService.Find(User.Identity.Name);
  if (_user == null) ModelState.AddModelError("", "用戶(hù)不存在");
  else
  {
  if (TryUpdateModel(_user, new string[] { "DisplayName", "Email" }))
  {
   if (ModelState.IsValid)
   {
   if (userService.Update(_user)) ModelState.AddModelError("", "修改成功!");
   else ModelState.AddModelError("", "無(wú)需要修改的資料");
   }
  }
  else ModelState.AddModelError("", "更新模型數(shù)據(jù)失敗");
  }
  return View("Details", _user);
 }

代碼中的TryUpdateModel(_user, new string[] { "DisplayName", "Email" }) 表示我只想從客戶(hù)提交的數(shù)據(jù)中更新DisplayName和Email
 
四、修改密碼
先建立一個(gè)視圖模型ChangePasswordViewModel

using System.ComponentModel.DataAnnotations;

namespace Ninesky.Web.Areas.Member.Models
{
 /// summary>
 /// 修改密碼視圖模型
 /// remarks>創(chuàng)建:2014.02.19/remarks>
 /// /summary>
 public class ChangePasswordViewModel
 {
 /// summary>
 /// 原密碼
 /// /summary>
 [Required(ErrorMessage = "必填")]
 [Display(Name = "密碼")]
 [StringLength(20, MinimumLength = 6, ErrorMessage = "{2}到{1}個(gè)字符")]
 [DataType(DataType.Password)]
 public string OriginalPassword { get; set; }

 /// summary>
 /// 新密碼
 /// /summary>
 [Required(ErrorMessage = "必填")]
 [Display(Name = "新密碼")]
 [StringLength(20, MinimumLength = 6, ErrorMessage = "{2}到{1}個(gè)字符")]
 [DataType(DataType.Password)]
 public string Password { get; set; }

 /// summary>
 /// 確認(rèn)密碼
 /// /summary>
 [Required(ErrorMessage = "必填")]
 [Compare("Password", ErrorMessage = "兩次輸入的密碼不一致")]
 [Display(Name = "確認(rèn)密碼")]
 [DataType(DataType.Password)]
 public string ConfirmPassword { get; set; }
 }
}

然后在UserController中添加動(dòng)作public ActionResult ChangePassword() 直接返一個(gè)視圖。右鍵添加ChangePasswordViewModel類(lèi)型的視圖

@model Ninesky.Web.Areas.Member.Models.ChangePasswordViewModel

@{
 ViewBag.Title = "修改密碼";
}
div class="row">
 div class="col-md-3 col-sm-4">@Html.Action("Menu")/div>
 div class="col-md-9 col-sm-8">
 ol class="breadcrumb">
  li>span class="glyphicon glyphicon-home">a> 會(huì)員中心/a>/span>/li>
  li>a> 個(gè)人中心/a>/li>
  li>修改密碼/li>
 /ol>

 @using (Html.BeginForm())
 {
  @Html.AntiForgeryToken()

  div class="form-horizontal">
  h4>修改密碼/h4>
  hr />
  @Html.ValidationSummary(true)

  div class="form-group">
   @Html.LabelFor(model => model.OriginalPassword, new { @class = "control-label col-md-2" })
   div class="col-md-10">
   @Html.EditorFor(model => model.OriginalPassword)
   @Html.ValidationMessageFor(model => model.OriginalPassword)
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.Password, new { @class = "control-label col-md-2" })
   div class="col-md-10">
   @Html.EditorFor(model => model.Password)
   @Html.ValidationMessageFor(model => model.Password)
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.ConfirmPassword, new { @class = "control-label col-md-2" })
   div class="col-md-10">
   @Html.EditorFor(model => model.ConfirmPassword)
   @Html.ValidationMessageFor(model => model.ConfirmPassword)
   /div>
  /div>

  div class="form-group">
   div class="col-md-offset-2 col-md-10">
   input type="submit" value="修改" class="btn btn-default" />
   /div>
  /div>
  /div>
 }

 @section Scripts {
  @Scripts.Render("~/bundles/jqueryval")
 }

 /div>
/div>

在添加一個(gè)接受處理動(dòng)作,代碼也很簡(jiǎn)單

[ValidateAntiForgeryToken]
 [HttpPost]
 public ActionResult ChangePassword(ChangePasswordViewModel passwordViewModel)
 {
  if(ModelState.IsValid)
  {
  var _user = userService.Find(User.Identity.Name);
  if (_user.Password == Common.Security.Sha256(passwordViewModel.OriginalPassword))
  {
   _user.Password = Common.Security.Sha256(passwordViewModel.Password);
   if (userService.Update(_user)) ModelState.AddModelError("", "修改密碼成功");
   else ModelState.AddModelError("", "修改密碼失敗");
  }
  else ModelState.AddModelError("", "原密碼錯(cuò)誤");
  }
  return View(passwordViewModel);
 }

五、在首頁(yè)顯示登錄、注冊(cè)鏈接
在Web的Shared文件件添加LoginPartial.cshtml視圖文件,在用戶(hù)未登錄時(shí)顯示登錄和注冊(cè)鏈接,登錄后顯示用戶(hù)名。

@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
 using (Html.BeginForm("Logout", "User", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
 {
 @Html.AntiForgeryToken()

 ul class="nav navbar-nav navbar-right">
  li>
  @Html.ActionLink("你好 " + User.Identity.GetUserName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "管理" })
  /li>
  li>a href="javascript:document.getElementById('logoutForm').submit()">注銷(xiāo)/a>/li>
 /ul>
 }
}
else
{
 ul class="nav navbar-nav navbar-right">
 li>@Html.ActionLink("注冊(cè)", "Register", "User", routeValues: new { Area = "Member" }, htmlAttributes: new { id = "registerLink" })/li>
 li>@Html.ActionLink("登錄", "Login", "User", routeValues: new {Area="Member"}, htmlAttributes: new { id = "loginLink" })/li>
 /ul>
}

效果如下:

登錄前

登陸后

 ok.現(xiàn)在我們可以給給member區(qū)域的UserController控制器和Homecontroller加上[Authorize]特性。并為Usercontroller的注冊(cè) 登錄 驗(yàn)證碼action 加上[AllowAnonymous]特性。

這次修改資料部分用到了部分更新模型方法TryUpdateModel,到此member區(qū)域的用戶(hù)部分暫時(shí)結(jié)束。下次開(kāi)始內(nèi)容部分,希望大家繼續(xù)關(guān)注。

您可能感興趣的文章:
  • ASP.NET MVC5網(wǎng)站開(kāi)發(fā)之添加\刪除\重置密碼\修改密碼\列表瀏覽管理員篇2(六)
  • Asp.NEt郵箱驗(yàn)證修改密碼通過(guò)郵箱找回密碼功能

標(biāo)簽:洛陽(yáng) 衢州 贛州 青海 崇左 南寧 汕尾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET MVC5網(wǎng)站開(kāi)發(fā)用戶(hù)修改資料和密碼(六)》,本文關(guān)鍵詞  ASP.NET,MVC5,網(wǎng)站開(kāi)發(fā),用戶(hù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET MVC5網(wǎng)站開(kāi)發(fā)用戶(hù)修改資料和密碼(六)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于ASP.NET MVC5網(wǎng)站開(kāi)發(fā)用戶(hù)修改資料和密碼(六)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    xnxx国产精品| 久久久久久久久岛国免费| 91猫先生在线| 欧美精品高清视频| 精品不卡在线视频| 国产精品家庭影院| 日韩专区欧美专区| 国产精品亚洲午夜一区二区三区 | 韩国中文字幕2020精品| 精品系列免费在线观看| 99久久国产综合色|国产精品| 欧美日韩一级二级| 久久久久久久久岛国免费| 日韩精品一二三| 91小视频免费看| 2020国产精品| 日韩精品视频网站| 97超碰欧美中文字幕| 久久精品一区八戒影视| 日本成人中文字幕在线视频| 亚洲综合在线五月| 菠萝蜜视频在线观看一区| 欧美精品一区二区三区高清aⅴ| 午夜精品爽啪视频| 色视频成人在线观看免| 中文字幕在线观看一区二区| 国产精品亚洲成人| 26uuu国产日韩综合| 国内精品久久久久影院一蜜桃| 欧美日韩黄色影视| 免费久久99精品国产| 日韩欧美国产精品一区| 久久99精品久久久久久久久久久久 | 成人高清在线视频| 1024成人网色www| 日本久久电影网| 亚洲国产wwwccc36天堂| 欧美丰满嫩嫩电影| 国产一区二区三区四区在线观看 | 麻豆精品新av中文字幕| 91麻豆精品国产91久久久久久| 亚洲国产精品久久人人爱| 欧美一级久久久| 久久国产福利国产秒拍| 久久久精品免费观看| www.亚洲国产| 视频一区视频二区中文| 久久综合精品国产一区二区三区| 国产suv精品一区二区三区| 中文字幕在线视频一区| 在线精品视频一区二区三四| 麻豆精品一区二区三区| 国产精品免费丝袜| 日韩免费视频一区二区| 91理论电影在线观看| 裸体一区二区三区| 日韩毛片在线免费观看| 欧美日本一区二区三区四区| 粉嫩aⅴ一区二区三区四区| 亚洲国产中文字幕| 国产精品视频你懂的| 久久午夜国产精品| 欧美大度的电影原声| 久久精品人人做人人爽97| 欧美一区二区播放| 欧美熟乱第一页| 色8久久精品久久久久久蜜| 国产99久久久国产精品潘金 | 久久久噜噜噜久噜久久综合| 8x8x8国产精品| 制服.丝袜.亚洲.另类.中文| 欧美日韩黄视频| 欧美中文字幕一二三区视频| 成人av在线看| www.成人在线| 成人免费三级在线| 国产高清在线精品| 国产自产高清不卡| 捆绑变态av一区二区三区| 免费人成精品欧美精品| 精品一区二区三区的国产在线播放| 亚洲成人三级小说| 夜夜嗨av一区二区三区中文字幕| 夜夜嗨av一区二区三区四季av| 亚洲视频一区在线| 亚洲色图一区二区三区| 亚洲美腿欧美偷拍| 日韩中文字幕91| 国内精品国产成人国产三级粉色| 精品一区二区三区免费| 成人看片黄a免费看在线| 日本韩国一区二区| 欧美电影免费观看高清完整版| 日韩精品一区二区三区四区| 国产精品美女久久久久aⅴ国产馆| 亚洲免费观看在线观看| 卡一卡二国产精品| 一本大道久久精品懂色aⅴ| 欧美日韩国产影片| 欧美激情一区二区| 奇米亚洲午夜久久精品| 成人午夜视频在线观看| 日韩欧美电影一二三| 亚洲制服丝袜在线| 国产精品一区二区不卡| 欧美猛男超大videosgay| 亚洲国产成人私人影院tom| 日韩精品一二三| 欧美综合一区二区三区| 国产精品人人做人人爽人人添| 美女诱惑一区二区| 欧美午夜免费电影| 综合久久国产九一剧情麻豆| 国产伦精品一区二区三区在线观看| 制服丝袜亚洲播放| 日日嗨av一区二区三区四区| 欧美亚洲愉拍一区二区| 亚洲乱码国产乱码精品精的特点| 国产激情91久久精品导航| 精品国产免费视频| 麻豆91免费观看| 精品理论电影在线观看 | 精品久久久久久久久久久久包黑料| 日日夜夜免费精品视频| 欧美精品第1页| 奇米一区二区三区| 日韩欧美激情在线| 粉嫩av一区二区三区粉嫩| 亚洲日本青草视频在线怡红院| 色婷婷一区二区| 日韩国产欧美一区二区三区| 欧美成人精品1314www| 国产福利91精品一区二区三区| 欧美精品一区二区在线播放| 国产精品综合久久| 亚洲欧美日韩中文播放 | 亚洲主播在线播放| 日韩女优av电影| 国产91对白在线观看九色| 亚洲女人的天堂| 日韩一区二区免费电影| proumb性欧美在线观看| 亚洲福利视频一区| 精品人在线二区三区| 99v久久综合狠狠综合久久| 婷婷国产v国产偷v亚洲高清| 国产视频一区二区在线| 欧美日韩一区二区三区四区五区| 精品一区二区日韩| 久久国产精品无码网站| 亚洲欧美一区二区不卡| 久久嫩草精品久久久精品一| 色拍拍在线精品视频8848| 狠狠网亚洲精品| 亚洲尤物在线视频观看| 中文字幕国产一区二区| 日韩午夜电影av| 欧美午夜在线一二页| 不卡区在线中文字幕| 美女精品自拍一二三四| 午夜日韩在线电影| 亚洲品质自拍视频| 亚洲免费av高清| 亚洲免费av高清| 亚洲精品久久久久久国产精华液| 中文字幕欧美日韩一区| 国产欧美一区二区精品久导航| 欧美一级片在线看| 日韩美一区二区三区| 欧美一区二区三区男人的天堂| 欧美日韩mp4| 日韩一区二区三区四区五区六区| 欧美日韩成人综合在线一区二区| 欧美日韩另类一区| 欧美一区二区三区思思人| 精品少妇一区二区三区| 精品国产凹凸成av人导航| 国产日韩欧美精品电影三级在线| 欧美国产欧美综合| 亚洲精品一二三区| 午夜激情久久久| 久88久久88久久久| 色综合久久久久综合体| 欧美日韩国产另类一区| 日韩欧美一区在线| 中文字幕乱码亚洲精品一区| 亚洲高清一区二区三区| 国产69精品久久久久毛片| 在线观看日韩毛片| 欧美大片拔萝卜| 亚洲精品国产品国语在线app| 日欧美一区二区| 色香色香欲天天天影视综合网| 日韩欧美一区二区在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 久久er99精品| 欧美日韩高清一区二区不卡 | 岛国av在线一区| 欧美一区二区三区免费在线看| 国产欧美日产一区|