ASP.NET?MVC5網(wǎng)站開發(fā)之用戶資料的修改和刪除3(七)
這次主要實(shí)現(xiàn)管理后臺(tái)界面用戶資料的修改和刪除,修改用戶資料和角色是經(jīng)常用到的功能,但刪除用戶的情況比較少,為了功能的完整性還是坐上了。主要用到兩個(gè)action “Modify”和“Delete”。
一、用戶資料修改(Modify)
此功能分兩個(gè)部分:
public ActionResult Modify(int id) 用于顯示用戶信息
[httppost]
public ActionResult Modify(FormCollection form)用戶就收前臺(tái)傳來(lái)的信息并修改
1、顯示用戶信息
/// <summary> /// 修改用戶信息 /// </summary> /// <param name="id">用戶主鍵</param> /// <returns>分部視圖</returns> public ActionResult Modify(int id) { //角色列表 var _roles = new RoleManager().FindList(); List<SelectListItem> _listItems = new List<SelectListItem>(_roles.Count()); foreach (var _role in _roles) { _listItems.Add(new SelectListItem() { Text = _role.Name, Value = _role.RoleID.ToString() }); } ViewBag.Roles = _listItems; //角色列表結(jié)束 return PartialView(userManager.Find(id)); }
此action有一個(gè)參數(shù)id,接收傳入的用戶ID,在action中查詢角色信息,并利用viewBage傳遞到視圖,并通過(guò)return PartialView(userManager.Find(id))向視圖傳遞用戶模型返回分部視圖。
視圖代碼如下:
@model Ninesky.Core.User @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) @Html.HiddenFor(model => model.UserID) <div class="form-group"> @Html.LabelFor(model => model.RoleID, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownListFor(model => model.RoleID, (IEnumerable<SelectListItem>)ViewBag.Roles, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.RoleID, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Username, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Username, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } }) @Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Sex, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.RadioButtonFor(model => model.Sex, 1) 男 @Html.RadioButtonFor(model => model.Sex, 0) 女 @Html.RadioButtonFor(model => model.Sex, 2) 保密 @Html.ValidationMessageFor(model => model.Sex, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LastLoginTime, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.LastLoginTime, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } }) @Html.ValidationMessageFor(model => model.LastLoginTime, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LastLoginIP, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.LastLoginIP, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } }) @Html.ValidationMessageFor(model => model.LastLoginIP, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.RegTime, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.RegTime, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } }) @Html.ValidationMessageFor(model => model.RegTime, "", new { @class = "text-danger" }) </div> </div> </div> }
2、修改用戶資料的后臺(tái)處理
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Modify(int id,FormCollection form) { Response _resp = new Auxiliary.Response(); var _user = userManager.Find(id); if (TryUpdateModel(_user, new string[] { "RoleID", "Name", "Sex", "Email" })) { if (_user == null) { _resp.Code = 0; _resp.Message = "用戶不存在,可能已被刪除,請(qǐng)刷新后重試"; } else { if (_user.Password != form["Password"].ToString()) _user.Password = Security.SHA256(form["Password"].ToString()); _resp = userManager.Update(_user); } } else { _resp.Code = 0; _resp.Message = General.GetModelErrorString(ModelState); } return Json(_resp); }
此方法有兩個(gè)參數(shù)id 和FormCollection form,不用User直接做模型的原因是因?yàn)閡ser會(huì)把前臺(tái)所有數(shù)據(jù)都接收過(guò)來(lái),這里我并不想允許修改用戶名,所以在方法中使用TryUpdateModel綁定允許用戶修改的屬性。TryUpdateModel在綁定失敗時(shí)同樣會(huì)在在ModelState中記錄錯(cuò)誤,可以利用自定義方法GetModelErrorString獲取到錯(cuò)誤信息并反饋給視圖。
2、前臺(tái)顯示和處理
打開Index視圖找到表格初始化方法,格式化列“Username”使其顯示一個(gè)連接,代碼紅線部分。
使其看起來(lái)這個(gè)樣子,當(dāng)用戶點(diǎn)擊連接的時(shí)候可以顯示修改對(duì)話框
彈出窗口和發(fā)送到服務(wù)器的js代碼寫到表格的onLoadSuccess方法里
onLoadSuccess: function () { //修改 $("a[data-method='Modify']").click(function () { var id = $(this).attr("data-value"); var modifyDialog = new BootstrapDialog({ title: "<span class='glyphicon glyphicon-user'></span>修改用戶", message: function (dialog) { var $message = $('<div></div>'); var pageToLoad = dialog.getData('pageToLoad'); $message.load(pageToLoad); return $message; }, data: { 'pageToLoad': '@Url.Action("Modify")/' + id }, buttons: [{ icon: "glyphicon glyphicon-plus", label: "保存", action: function (dialogItself) { $.post($("form").attr("action"), $("form").serializeArray(), function (data) { if (data.Code == 1) { BootstrapDialog.show({ message: data.Message, buttons: [{ icon: "glyphicon glyphicon-ok", label: "確定", action: function (dialogItself) { $table.bootstrapTable("refresh"); dialogItself.close(); modifyDialog.close(); } }] }); } else BootstrapDialog.alert(data.Message); }, "json"); $("form").validate(); } }, { icon: "glyphicon glyphicon-remove", label: "關(guān)閉", action: function (dialogItself) { dialogItself.close(); } }] }); modifyDialog.open(); }); //修改結(jié)束 }
顯示效果如下圖
二、刪除用戶
UserController中添加刪除方法
/// <summary> /// 刪除 /// </summary> /// <param name="id">用戶ID</param> /// <returns></returns> [HttpPost] public ActionResult Delete(int id) { return Json(userManager.Delete(id)); }
打開Index視圖找到表格初始化方法,添加“操作”列格式化列使其顯示一個(gè)刪除按鈕,代碼紅框部分。
前臺(tái)顯示效果
然后在表格的onLoadSuccess方法里剛寫的修改用戶信息的js代碼后面寫刪除用戶的js代碼
//修改結(jié)束 //刪除按鈕 $("a[data-method='Delete']").click(function () { var id = $(this).attr("data-value"); BootstrapDialog.confirm("你確定要?jiǎng)h除" + $(this).parent().parent().find("td").eq(3).text() + "嗎?\n 建議盡可能不要?jiǎng)h除用戶。", function (result) { if (result) { $.post("@Url.Action("Delete", "User")", { id: id }, function (data) { if (data.Code == 1) { BootstrapDialog.show({ message: "刪除用戶成功", buttons: [{ icon: "glyphicon glyphicon-ok", label: "確定", action: function (dialogItself) { $table.bootstrapTable("refresh"); dialogItself.close(); } }] }); } else BootstrapDialog.alert(data.Message); }, "json"); } }); }); //刪除按鈕結(jié)束 } }); //表格結(jié)束
前臺(tái)顯示效果
代碼下載請(qǐng)見鏈接
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection 集群場(chǎng)景)下篇
- ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection)中篇
- ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection)上篇
- ASP.NET Core Kestrel 中使用 HTTPS (SSL)
- ASP.NET Core集成微信登錄
- 微信搶紅包ASP.NET代碼輕松實(shí)現(xiàn)
- 基于ASP.NET實(shí)現(xiàn)日期轉(zhuǎn)為大寫的漢字
- ASP.NET?MVC5網(wǎng)站開發(fā)之用戶添加和瀏覽2(七)
- ASP.NET?MVC5網(wǎng)站開發(fā)之用戶角色的后臺(tái)管理1(七)
- ASP.NET 程序員都非常有用的85個(gè)工具
相關(guān)文章
C# 文件保存到數(shù)據(jù)庫(kù)中或者從數(shù)據(jù)庫(kù)中讀取文件
在編程中我們常常會(huì)遇到“將文件保存到數(shù)據(jù)庫(kù)中”這樣一個(gè)問(wèn)題,雖然這已不是什么高難度的問(wèn)題,但對(duì)于一些剛剛開始編程的朋友來(lái)說(shuō)可能是有一點(diǎn)困難。2009-03-03asp.net 通過(guò)指定IP地址得到當(dāng)前的網(wǎng)絡(luò)上的主機(jī)的域名
通過(guò)指定的ip地址獲取當(dāng)前網(wǎng)絡(luò)的主機(jī)的域名,大家可以看看2009-02-02.net重啟iis線程池和iis站點(diǎn)程序代碼分享
服務(wù)器監(jiān)控,一定時(shí)間內(nèi)或者iis異常就需要重啟線程池和站點(diǎn),下面我們用代碼來(lái)做這個(gè)功能2013-12-12使用.NET?6開發(fā)TodoList應(yīng)用之領(lǐng)域?qū)嶓w創(chuàng)建原理和思路
雖然TodoList是一個(gè)很簡(jiǎn)單的應(yīng)用,業(yè)務(wù)邏輯并不復(fù)雜,至少在這個(gè)系列文章中我并不想使其過(guò)度復(fù)雜,接下來(lái)通過(guò)本文給大家介紹使用.NET?6開發(fā)TodoList應(yīng)用之領(lǐng)域?qū)嶓w創(chuàng)建思路及原理,需要的朋友可以參考下2021-12-12asp.net編程獲取項(xiàng)目根目錄實(shí)現(xiàn)方法集合
這篇文章主要介紹了asp.net編程獲取項(xiàng)目根目錄實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析總結(jié)了asp.net針對(duì)項(xiàng)目目錄的操作技巧與注意事項(xiàng),需要的朋友可以參考下2015-11-11asp.Net JS取母板頁(yè)控件值的簡(jiǎn)單方法
這篇文章介紹了asp.Net JS取母板頁(yè)控件值的簡(jiǎn)單方法,有需要的朋友可以參考一下2013-07-07